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格式化时异常

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

 

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是无法识别这种符号或者这个关键字的,导致编译失败。

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
针对Android的冻屏bug处理,您可以尝试以下几个方法来解决问题: 1. 检查设备设置:首先,确保您的设备没有启用任何特定的冻屏设置。有些设备有自动冻屏或定时冻屏功能,可能会导致应用程序在一段时间后自动冻结。检查设置菜单中的“显示”或“锁屏”选项,调整对应的设置。 2. 检查应用程序代码:检查您的应用程序代码,尤其是与屏幕状态相关的部分。确保您正确地处理了屏幕冻结和解冻事件。您可以使用Android的生命周期方法(如onPause()和onResume())来处理这些事件,以确保应用程序在冻屏和解冻时正确地执行所需的操作。 3. 使用WakeLock:如果您的应用程序需要在屏幕关闭时继续运行(例如后台音乐播放器),您可以使用WakeLock来保持设备唤醒状态。这样可以防止设备进入休眠模式并导致应用程序被冻结。但是,请注意使用WakeLock可能会对设备电池寿命产生一定影响,因此请明智地使用。 4. 更新设备驱动程序和固件:有时,冻屏问题可能是由设备驱动程序或固件问题引起的。确保您的设备上运行的Android版本和相关驱动程序是最新的。可以通过检查设备制造商的官方网站或系统更新功能来获取最新的更新。 5. 联系开发者社区:如果以上方法都无法解决问题,可以尝试在开发者社区寻求帮助。在Android开发者论坛、Stack Overflow或GitHub等平台上,可能有其他开发者遇到类似的问题并提供了解决方案或建议。 请注意,以上方法仅为一般建议,具体解决方案可能因设备、应用程序和操作系统版本而异。根据实际情况进行调试和排除故障是解决冻屏bug的关键。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值