Android异常-解决方法记录

1、在AndroidStudio升级到3.4.1,SDK升级到28以后,遇到了分包问题

* 异常ClassNotFoundException: Didn't find class "***" on path: DexPathList/-1.apk
* 问题描述:在Android4.4手机上遇到的问题,APK安装成功后,APP一打开就直接奔溃,Android6.0以上手机启动没问题
* 原因:程序引用第三方jar库的时候,必须使用到分包,但是没有初始化
* 解决方法:
    1、app的build.gradle中添加multiDexEnabled
    defaultConfig {
        applicationId "*.*.*"
        minSdkVersion 16
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    2、引用依赖
    implementation 'com.android.support:multidex:1.0.3'
    3、在自己的Application中注册(有人说在Application的onCreate中注册,亲测没用),正确的是复写attachBaseContext方法,在这里注册。
    @Override
	protected void attachBaseContext(Context base) {
		super.attachBaseContext(base);
		MultiDex.install(base);
	}
    

2、在Dialog.show的时候遇到WindowManager$BadTokenException问题

* 异常:android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?
* 问题描述:在Dialog.Show之前,加了优先级设置,alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);
* 原因:API 25以上系统直接禁止用户使用TYPE_TOAST创建悬浮窗。
* 解决方法:在Android7.1.1上使用需要申请system alert window权限的系统级悬浮窗,或者是层级较低的TYPE_PHONE悬浮窗。
* 使用需要申请系统权限的悬浮窗:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);

3、使用Glide加载图片的时候遇到IllegalArgumentException

* 异常:java.lang.IllegalArgumentException: You cannot start a load for a destroyed activity
* 问题描述:在Glide.with的时候,Activity销毁了
* 解决方法:在Glide加载的时候判断activity是否已经销毁,没有再加载
private static boolean isValidContextForGlide(Context context) {
    if (context == null) {
        return false;
    }
    if (context instanceof Activity) {
        Activity activity = (Activity) context;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            return !activity.isDestroyed() && !activity.isFinishing();
        } else {
            return !activity.isFinishing();
        }
    }
    return true;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值