以后我遇到所有的适配问题都会放置在这个里面
1、魅族APK安装报错:
测试手机:华为8.0两款(分刘海屏和非刘海屏),小米两款,oppo两款,魅族一款,vivo一款,锤子一款
只有魅族报错,
报错内容如下
DELETE_FAILED_INTERNAL_ERROR,
Error while Installing APKs
无法安装完全不知道什么鬼,除开魅族手机,其余测试手机都能直接通过debug安装,两个小时多个开发代码版本对比发现,是库和Gradle的锅,这里建议Gradle版本降至3.2.1,不会影响Androidx也不会影响大多数库。
小米手机目前是所有测试机器中最垃圾的,debug测试卡顿这个问题一年了都没得人修复,社区直接删除了debug卡顿的反馈,直接不修复这个,操作秀到我了666,垃圾,测试一次麻烦得要死。
2、全屏适配:Only fullscreen opaque activities can request orientation错误崩溃
描述:activity弹出activitytwo,其中
找到你设置透明的Activity,将theme
- true
改成
- false
- true
有时候这就搞定了
但有时候还不行,不行怎么办?继续改,在AndroidManifest中对应的activity下面添加如下代码,让他跟着父页面进行屏幕适应
android:screenOrientation="behind"
nice搞定,还不行私聊??
3、单例音乐循环播放导致主页面动画卡顿,报错为:MEDIA_PLAYBACK_COMPLETE(2)
情况:主页全是动画,目测最少12个json动画(每个动画各个渲染方式也挺多的,这里就不讲了)
MediaPlayer使用如下
private static MediaPlayer mediaPlayer = null;//声明一个MediaPlayer对象
public static void playBGSound(final Activity activity) {
if (mediaPlayer != null) {
mediaPlayer .release();//释放资源
}
mediaPlayer = MediaPlayer.create(activity, R.raw.music);
mediaPlayer .setVolume(0.5,0.5);
mediaPlayer .setLooping(true);//循环不再做骚操作了,直接循环了
mediaPlayer .start();
// //为MediaPlayer添加播放完成事件监听 //下面的写法会与主页面冲突,会导致卡顿
// mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
// @Override
// public void onCompletion(MediaPlayer mp) {
// try {
// Thread.sleep(3000);//让线程休眠3秒
// playBGSound(activity);//重新播放音乐
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// }
// });
}
神奇的bug
4、最近又发现了一个麻烦的问题,Android弹窗的问题,用activity弹出activity不能全屏的问题(dialog弹出会引出虚拟按键,给用户一种屏幕在动的赶脚,太LOW了,当然这里说的仅只是app全屏的情况,非全屏完全不用考虑,直接用dialog就行)
弹窗问题实现后续会贴上来,先说解决办法:
Window window = this.getWindow();//this===当前activity
window .setType( WindowManager.LayoutParams.TYPE_APPLICATION_PANEL);
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
window.setLayout( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
直接强制全屏,网上有很多发什么
getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);//(鸡毛用没有)
做个记录大家看一下
5、新问题:突然发现的,前后台切换,有时候会导致触发系统GC,会干掉你的部分数据
应用进入后台,系统可能因为内存紧张而杀掉activity,一般的页面还行,但是当你的页面有滚动条的时候就尴尬了啊,他有可能干掉你滚动条setProgress(int),int可能为空,哦 卖狗的,不说了,提高优先级,防止被kill。
application 里面添加android:persistent="true"
设置后app提升为系统核心级别,只要不是用户主动kill掉就不会被kill掉
还有一些方法,比如保存数据,我这里更加推荐数据保存的方式,存储在SharedPreference里面,在application 里面初始化主要的数据也行,数据保存就不多说了,网上一搜一大把,自己找找,用什么办法看自己吧!这个错误记录到这里了。
扩展:我本以为只有上面这种:系统可能因为内存紧张而杀掉activity,实际还有一种可能,后续更新,https://www.jianshu.com/p/635970ac603a里面提到的,也是可以解决的。
6、关于webview加载html(不能用腾讯的X5内核,腾讯X5内核截止到现在都不支持直接调用本地域名地址---被这个问题搞到绝望,最后才发现)
1、webview加载本地手机SD存储的html(图片也在本地)
体验比较好,加载速度快,包小
2、webview加载assert里面的html文件(不推荐,html内容比较多的情况下,包很大)
3、webview加载类似wap的网页url(图片和域名都采用http/https)(图片加载缓慢,体验不好)
4、webview加载类似wap的网页url(域名都采用http/https,图片下载在本地)
这个方法需要重写WebResourceResponse拦截url,把图片转文件流再放到html上去,缺点很明显,低端机经常加载不出来,尴尬
具体代码需要可以留言,主要是网上很多,这里也不想过多缀述不然看着累
一切为了体验和性能加油
7、继续升级Android studio3.5,报错Unable to start the daemon process
org.gradle.jvmargs=-Xmx1536m改成
org.gradle.jvmargs=-Xmx512m
8、这里说一个android studio比较奇怪的一个问题,打包失败的情况,android studio并不是每次都打包成功,极少极少的情况会出现打包失败的情况,因此在做打包的操作的时候,需要先clean project一遍然后再rebuild一遍,最后再去通过build进行打包,习惯很重要啊
9、错误报错:如下
Rejecting re-init on previously-failed class java.lang.Class
解决办法:添加库文件如下即可解决
implementation 'org.conscrypt:conscrypt-android:2.2.1'
10、报错内容如下:
Rejecting re-init on previously-failed class java.lang.Class: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/view/View$OnUnhandledKeyEventListener;
很多人都在说降低版本就行,确实是一个解决办法,
11、升级android studio4.0版本报错
报错情况 正确修改方式
response.body.string() response.body?.string().toString()
类似下面这种写法
var url: String? = null
Log.e("urlagent", url)
改成
var url: String? = null
Log.e("urlagent", url!!)
现在定义后要做为空的检查了。。
12、Android WebView 加载失败net::ERR_CLEARTEXT_NOT_PERMITTED
方法1(有可能没用):在application里面添加如下(Android 9.0(API级别28)开始,默认情况下禁用明文支持)这里打开明文支持,不过没得有可能有用
android:usesCleartextTraffic="true"
方法2(实测有用):res 下新建 xml 目录新建文件network_security_config.xml
AndroidManifest.xml 的 application里再添加
android:networkSecurityConfig="@xml/network_security_config"
13、android WebView LayoutAlgorithm.SINGLE_COLUMN失效问题
webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);只针对4.4以下有效,4.4后就无效了,目前比较常用的方式就是在html的标签里面添加
width: 100%;height: auto;
14、添加线程报错
结果Call from user 0 as user without permission INTERACT_ACROSS_USERS
目前不知道为什么,还早找原因,线程添加的object的wait和notify
不加就没事,加了就直接报错
15、xml无法编译
网上说的删除.im文件啊,什么勾选啊之类的全部无效
我用了个最最直白的方式,直接删除下载最新版
https://developer.android.google.cn/studio/#downloads
16、PictureSelector has no zero argument constructor
End of input at character 0 of
17 高德地图嵌入卡顿问题,
可能的情况有两种
1、高德版本问题
这个情况升级版本就行,有问题的版本可能是7.几的版本。具体是多少忘记了
2、外层嵌套问题,导致焦点获取不准确
外层只要嵌入NestedScrollView或者ScrollView等滚动类型的控件都会出现这样的问题
需要对页面进行重新布局就行,不行的话,你就只有监听点击事件对对应的区域进行管理就行
18
后续继续更新