Android 开发中的一些bug

Android 开发中的一些bug

  1. 泛型extends的ClassCastException,静态代码没有报错却崩溃—>:编译时类型擦除,使得传入的泛型只保留的extends类的类型,运行时出现异常就会报<父类>case <子类>异常,在详细报错信息中可查看原因;

  2. as编译报错:Program type already present: com.tencent.bugly.BuglyStrateg,详细报错信息包括multiDex合并失败等错误。—>

    • 包重复引用,删除项目中多余的包,保留一个
    • as缓存,清除project,invalidate cash~
    • gradle 缓存,命令行gradlew clean清除
  3. Glide加载Https图片出错,解决:Glide+okhttp —>Glide加载Https图片

  4. Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter savedInstanceState—>这就是一个空指针,kotlin类继承java类,重写方法的参数可能为空的情况需要加上“?”,

  5. java.lang.UnsupportedOperationException: Required method destroyItem was not overridden–>出现这个问题的原因是:可能是pagerAdapter里面没有继承这个方法detroyItem()或者是代码super.destroyItem(container, position, object);没有删除

@Override
    public void destroyItem(ViewGroup container, int position, Object object) {
//        super.destroyItem(container, position, object);这里调用了...
        container.removeView((View)object);
    }
  1. 使用CoordinatorLayout层叠效果时,如果滑动组件是viewpager,viewpapager内部的滑动布局会消耗滑动事件,而头部固定不动。有博客给出在viewpager的子view上层套NestedScrollView,虽然能滑动,由于viewppager不限高会影响到viewpager中fragment的布局–》可以再内部滑动布局加属性,
    tips:overScrollMode定义过度滚动行为。仅当视图可滚动时,才使用此属性。过度滚动是指当用户尝试滚动超出有意义的内容时能够接收反馈的能力,可选参数有:1 always(即使内容完全适合可用空间,也始终显示过度滚动效果),2 ifContentScrolls(仅在内容足够大以有意义地滚动时显示过度滚动效果),3 never 从不显示过度滚动效果,进而当超出滚动范围是能将事件传递给CoordinatorLayout
 android:overScrollMode="never"
  1. github上下载的项目不能成功sync,–》1.在项目gradle文件的allprojects和repositories下添加Google(),修改dependencies 下的com.android.tools.build:gradle的版本,2、修改项目目录\gradle\wrapper下gradle-wrapper.properties下的distributionUrl2版本,这两个gradle版本为本地已下载的gradlew版本
//1
repositories {
        google()
         jcenter()
			}
repositories {
	  google()
	   jcenter()
	 	}
//2
dependencies {
        classpath "com.android.tools.build:gradle:4.0.1"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // add plugin

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
//3
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
  1. Android 监听不到系统按键KEYCODE_MENU、KEYCODE_HOME
    处理方法1:操作home和menu会将应用置于后台,所以在onstop中监听即可
    public static boolean isHomeOrMenu(Context context) {//是否在系统界面,判断栈顶pagekeagename,或者为本包名
        ActivityManager mActivityManager =
                (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningTaskInfo> rti = mActivityManager.getRunningTasks(1);
        String pagekeagename = rti.get(0).topActivity.getPackageName();
        return getHomes(context).contains(pagekeagename) || TextUtils.equals(pagekeagename, context.getPackageName());
    }

    private static List<String> getHomes(Context context) {
        List<String> names = new ArrayList<String>();
        PackageManager packageManager = context.getPackageManager();
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_HOME);
        List<ResolveInfo> resolveInfo = packageManager.queryIntentActivities(intent,
                PackageManager.MATCH_DEFAULT_ONLY);
        for (ResolveInfo ri : resolveInfo) {
            names.add(ri.activityInfo.packageName);
        }
        return names;
    }
  1. debug运行正常,编译release后出问题:a、因为编译加入混淆的缘故,b、检查是否有buildconfig
    .debug的判断。
  2. 腾讯webview第二次播放时不能成功播放:在页面onresume时调用 WebView.resumeTimers();
  3. gvr混淆:引入Google vr(gvr)后运行正常,release后闪退,在progurad-rules中添加引入库的混淆文件
-keep class com.google.vr.sdk.widgets.** {*;}
-keep class com.google.vr.libraries.video.** {*;}
-keep class com.google.vr.sdk.audio.** {*;}
-keep class com.google.vr.sdk.widgets.common.** {*;}
-keep class com.google.vr.widgets.common.** {*;}
-keep class com.google.vr.** {*;}
-keep class com.google.vr.audio.** {*;}
-keep class com.google.vr.cardboard.** {*;}
-keep class com.google.vr.internal.** {*;}
-keep class com.google.vr.ndk.** {*;}
-keep class com.google.vr.sdk.** {*;}
-keep class com.google.vr.vrcore.** {*;}
-keep class com.google.vr.sdk.base.** {*;}
-keep class com.google.common.logging.nano.** {*;}
-keep class com.google.vrtoolkit.cardboard.** {*;}

  1. 360加固后模拟器打开闪退,并报如下错误,查看模拟器内核型号后发现其为电脑的CPU,造成原因是360未对模拟器的兼容,目前未找到解决办法。。。
    在这里插入图片描述
  2. 友盟maven报错,xxx.pom’. Received status code 403 from server: Forbidden ,No cached version available for offline mode.原因“组件库 2.1.0版本/Push SDK 6.0.1版本开始,Android SDK gradle在线依赖库启用新坐标。”—》关闭离线模式,添加或更改为新版的maven地址,参考
        maven { url 'https://maven.aliyun.com/repository/central' }
        maven { url 'https://maven.aliyun.com/nexus/content/repositories/google' }
        google()
        jcenter()
        maven { url 'https://developer.huawei.com/repo/' }
        maven { url 'https://repo1.maven.org/maven2/' }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值