Android BUG整理 持续更新~~

总结一下Android开发中遇到的疑难杂症~~

目录

1.使用.setAlpha()时,导致其他布局透明度也跟着改变

2.Kotlin协程报错 Animators may only be run on Looper threads

3.报错java.util.ConcurrentModificationException

4.在onCreate中调用showSoftInput()唤起软键盘无效

5.新建项目xml格式化时异常

6.报错出现类似“a.c.b”这种报错信息

7.Kotlin引入ARouter时报错:ARouter::Compiler >>> No module name, for more information, look at gradle log.

8.点击view显示PopupWindow,再次点击view时,PopupWindow会先消失再弹出。

9.Android Studio安装插件中途退出导致AS重新打开时报错。fatal error initializing plugin code iris

10.华为手机调试到断点,过几秒自动退出

11.部分手机App图标不显示

12.三方平台分享时不显示缩略图

13.分享到支付宝朋友失败,提示授权验证失败

14.EOCD signature not found in the last 65557 bytes of the file

15.引入kapt之后kotlin文件报错


1.使用.setAlpha()时,导致其他布局透明度也跟着改变

极其扯淡的问题,刚开始完全一脸懵逼不知从何下手,后来通过查阅资料得知:当多个布局共用一个资源的时候,这个资源是共享状态的,也就是说一个地方改动,其他引用这个资源的地方也会受到影响。

解决方案:在调用 .setAlpha() 之前先调用 .mutate() 这样状态就不会共享了。

ln_vBg.background.mutate().alpha = 0//设置透明度时先调用.mutate()

 

2.Kotlin协程报错 Animators may only be run on Looper threads

很简单的问题,动画只能运行在looper线程。用Handler或者通知方式把动画转到主线程调用就行。

不过顺便记录下原因:Kotlin协程其本质就是一个线程池(不过增加了一些调度,它的创建和delay延迟调用都开销很小),所以操作UI还是要转到主线程。

 

3.报错java.util.ConcurrentModificationException

这个是因为使用Iterator迭代器遍历集合的时候对集合进行了修改,导致.next和.remove抛异常。

解决方案:1.使用CopyOnWriteArrayList集合(这个集合允许遍历时进行增删); 2.加锁

 

4.在onCreate中调用showSoftInput()唤起软键盘无效

因为showSoftInput()必须在当前布局绘制结束之后调用才生效,(onResume之后调用不行,因为view真正开始绘制是在onResume之后)。正确方法应该是延迟调用,代码如下:

activity.getWindow().getDecorView().postDelayed(new Runnable() {
                @Override
                public void run() {
                    InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
                    if (imm != null) {
                        editText.requestFocus();
                        imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED);
                    }
                }
            }, 100);

 

5.新建项目xml格式化时异常

一个很小的问题,不过对强迫症来说不能格式化简直想死~~ 修改方法如下图:

Android BUG整理 持续更新~~_第1张图片

 

6.报错出现类似“a.c.b”这种报错信息

当时也是脑袋晕了,这么简单的问题没想到。只要出现“a.b.c.x()”类似这种报错,把混淆关了在测试。就可以定位到问题了。如果关闭混淆之后没错误了,那就是混淆出问题了。

(混淆是个麻烦事,如果实在是不想混淆,建议直接用360加固或者其他的一些加固软件加固。)

 

7.Kotlin引入ARouter时报错:ARouter::Compiler >>> No module name, for more information, look at gradle log.

就是没有设置module名,不过要注意,Kotlin在使用ARouter时引入方式和java不同,Kotlin引入如下图:

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions'

android {
    ...

}

kapt {
    generateStubs = true
    arguments {
        arg("AROUTER_MODULE_NAME", project.getName())
    }
}

dependencies {
    ...

    //阿里Arouter路由框架  支持模块间的路由、通信、解耦
    implementation('com.alibaba:arouter-api:1.4.0') {
        exclude group: 'com.android.support', module: 'support-media-compat'
        exclude group: 'com.android.support', module: 'support-v4'
        exclude group: 'com.android.support', module: 'support-v13'
    }
    kapt 'com.alibaba:arouter-compiler:1.2.1'

}

 

8.点击view显示PopupWindow,再次点击view时,PopupWindow会先消失再弹出。

这个倒也不算bug,不过却着实是困扰了我很久。在自定义PopupWindow时,点击一个按钮触发PopupWindow弹出,并且添加阴影遮罩,设置点击外部时PopupWindow消失。然后问题出现在:再次点击按钮的位置时,本来应该隐藏PopupWindow,但是会出现先隐藏,然后再次出现的问题。

解决方法:添加 PopupWindow.setFocusable(true);

原因分析:其实流程很好猜,PopupWindow和遮罩出现后,再次点击View的位置时,先是触发了PopupWindow点击外部消失。然后再次触发了View的点击事件。(应该是点击外部消失之后,点击事件没有终止,而是继续下发,所以导致View的点击事件再次触发。)  添加 setFocusable(true) 方法之后,点击屏幕外部消失的点击事件也交由PopupWindow处理,处理之后不会再次下发。

 

9.Android Studio安装插件中途退出导致AS重新打开时报错。fatal error initializing plugin code iris

在我安装这个插件时,不知道是因为我中途退出了还是插件有问题。重启打开AS直接报错,怎么都进不去。提示“初始化插件时出现致命错误”。

解决方案:其实很简单,这个插件出问题了,直接删了。

找到:C:\Users\自己的目录\.AndroidStudio3.5\config\plugins

找到报错的插件,删除,然后重新打开AS就可以了。

 

10.华为手机调试到断点,过几秒自动退出

好像是华为9.0手机的一个小bug,anr时会强制退出。在开发者选项中选择 “待调试应用” 选择要调试的app,然后勾选 “等待调试器” 。设置后到断点就不会退出了(我的测试机是荣耀9x,emui9.1.1。测试可行,2019.09.16)

 

11.部分手机App图标不显示

常见的一般是清下缓存,重启下就可以解决。

不过前几天碰见一个神奇的问题。公司上下几十个android手机图标都正常显示,只有一台vivo y66死活不显示App图标,但是在系统设置的应用管理中图标都正常显示。唯独桌面上App图标显示小机器人,后来灵机一动想到可能是 手机主题的问题 ,然后换了个主题试一下果然可以了,换过主题再切回原主题也正常。(应该是主题的图标缓存问题)

 

12.三方平台分享时不显示缩略图

分享网页时,微信和qq不显示缩略图。已检查:1.图片不大于32k;2.url是https;3.url中不含中文; 但是依然不显示,查阅资发现,是因为测试环境的问题。直接换正式环境(网页url和图片url在一个域名下)就好了。

 

13.分享到支付宝朋友失败,提示授权验证失败

这个小问题困扰了我大半天,跟支付宝技术客服聊了半天。最后发现是分享MD5签名必须小写,小写,小写!

 

14.EOCD signature not found in the last 65557 bytes of the file

字面意思是什么“找不到签名”,因为我出这个问题的时候是没修改任何代码,(期间装了一次解压工具,不知道有没有关系)所以判断大概率是缓存问题,用了clean、rebuild、invalidate caches等等都没用,最后万能的谷歌查到了,把apk文件删掉,然后再clean。搞定。(apk文件一般在 app\build\outputs 目录下)

 

15.引入kapt之后kotlin文件报错

极其扯淡的问题,添加kapt之后,有一个kotlin文件build之后生成的java全部报错,因为它的报错信息是整个类的build文件全部报错(太不智能了),所以只能自己找问题了,各种google各种排查,最后发现是因为:

import com.***.***.`interface`.PaintViewUploadDataInterface

注意上面的 ‘interface’ ,因为这个包名含有关键字,所以在导包时kotlin自动添加 ‘’ 号,这样的话不会报错。 但是估计kapt是无法识别这种符号或者这个关键字的,导致编译失败。

直接把带有关键字的包名改掉就可以了。(注:养成好习惯,包名、类名等一定不要使用关键字或者接近关键字的,以免出现歧义或者报错。)

你可能感兴趣的:(Android,Java,Kotlin)