Android 性能优化 (十四) 常见的奔溃crash问题

1.not attached to window manager
//判断Activity是否Destroy
protected boolean isDestroy(Activity activity) {
return activity == null || activity.isFinishing() ||
(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && activity.isDestroyed());
}
————————————————
2.android.view.WindowManager B a d T o k e n E x c e p t i o n d i a l o g 出 现 的 问 题 / / 修 正 后 代 码 i f ( ! i s F i n i s h i n g ( ) ) a l e r t . s h o w ( ) ; h t t p s : / / w w w . j i a n s h u . c o m / p / 4 c 5 f a f e 08 f a 7 a n d r o i d . v i e w . W i n d o w M a n a g e r BadTokenException dialog出现的问题 //修正后代码if(!isFinishing()) { alert.show();} https://www.jianshu.com/p/4c5fafe08fa7 android.view.WindowManager BadTokenExceptiondialog//if(!isFinishing())alert.show();https://www.jianshu.com/p/4c5fafe08fa7android.view.WindowManagerBadTokenException 7.1Toast问题的解决方案
解决toast的最好方案
https://github.com/PureWriter/ToastCompat
https://www.jianshu.com/p/ccfc5fa3130c
Android7.1.1Toast崩溃解决方案
3.android.database.sqlite.SQLiteDatabaseLockedException
数据库被锁
或者使用isDbLockedByOtherThreads方法判断数据库是否被锁住了
https://blog.csdn.net/u011386173/article/details/88558099
4. android.database.sqlite.SQLiteReadOnlyDatabaseException
数据库磁盘已满,就不能写了
getreaddatabase和getwritedatabase的区别
5.
android.database.sqlite.SQLiteFullException
database or disk is full (code 13)
com.yuedong.sport.run.step.StepDBHelper.void updateStepPeak(java.util.List)(SourceFile:356)
6.android.os.DeadObjectException异常
那么DeadObjectException什么意思呢,字面意思当前对象“死”了,也就是没有了呗!
出现这个问题其实大多源于当前程序异常崩溃,进程直接被杀死,但是as或者其他的软件未能捕获到bug 所以就爆出了这个DeadObjectException异常,所以出这个问题大多数是因为程序崩溃引起的
调用的对象不存在,因为它所在app进程不存在或进程崩溃,此时在底层回调时报错。
解决方案:
在调用对象之前,建议检查是否存在此进程。DeadObjectException 异常出现是因为app进程不存在或进程崩溃因此在底层回调时报错。
7.Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag

错误分析:
Context中有一个startActivity方法,Activity继承自Context,重载了startActivity方法。如果使用Activity的startActivity方法,不会有任何限制,而如果使用Context的startActivity方法的話,就需要开启一个新的的task,遇到这个异常,是因为使用了Context的startActivity方法。解决办法是,加一个flag。
代码:
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK );
解决办法:判断context的实例是啥?
————————————————
8.Fail to connect to camera service的几种原因和解决方法
1.之前对camera打开后,并没有释放掉。
解决对策就是调用下面的处理
camera.stopPreview();
camera.release();
camera = null;
2.权限问题
https://blog.csdn.net/zjd934784273/article/details/79485230
9.org.xmlpull.v1.XmlPullParserException
Binary XML file line #5: tag requires a ‘android:color’ attribute.

xml中的正确写法
一定需要添加颜色

<?xml version="1.0" encoding="utf-8"?> 10.Context.startForegroundService() did not then call Service.startForeground? 有几种情况会出现 通知栏: https://blog.csdn.net/sinat_20059415/article/details/80584487

11、android.content.res.Resources$NotFoundException

解决方案:
该异常表示找不到字符串资源 ID,检查引用的字符串资源 ID 是否在 R.java 文件中定义,或者检查传递的 ID 参数是否正确。
这种报错通常是因为将 int 等整型变量作为了参数传给了 View.setText() 调用,这种情况下该整型变量将被认为是一个资源ID号去资源列表中查找对应的资源,导致找不到对应资源错误。解决方法是把 int 型数据改成 String 类型,如 setText(Integer.toString(value)) 或 setText("" + value)。另外,建议在使用 inflate() 方法的时候,传入的布局资源最好使用 R.layout.xxx 来指定,这样可以降低出错的概率。

云测的问题分析

12.拉起失败
Error: Activity class {com.yuedong.sport/com.yuedong.sport.main.WelcomeActivity_} does not exist.
解决办法
1.AndroidMainfest.xml配置问题
2.myeclipse的程序缓存导致
原因:myeclipse的程序缓存导致,未找到MainActivity这个类,尤其会出现在修改过包名或者类名之后。因为有缓存所以对应就没找到这个类。
3.原因:因为android studio认为你的项目还是运行在手机上的,可是你把他卸载掉了,它自然不知道,所以才会出现这种情况。
4.相同得包名和类名冲突

12.Android之android.os.DeadObjectException原因,同上面
先判断进程是否存在。
13.找不到类和dex
E
AndroidRuntime: Caused by: java.lang.ClassNotFoundException: Didn’t find class “android.taobao.atlas.startup.AtlasBridgeApplication” on path: DexPathList[[zip file “/system/framework/android.test.runner.jar”, zip file “/data/app/com.yuedong.sport-1.apk”],nativeLibraryDirectories=[/data/app-lib/com.yuedong.sport-1, /vendor/lib, /system/lib]]
14.android process die的原因分析介绍
15.java.lang.NoSuchMethodError: android.app.ANRAppManager.dumpMessageHistory

原因分析:

Android是开源的系统,厂商获拿到源码后可以自由地定制和改造,当然,修改的过程可能带来一些不稳定的问题,会导致同样的代码,在一些特定的机型出现适配的问题

16.Adapter数据变化没有及时通知

adapter的内容变化了,但是你的ListView GridView RecycleView等并不知情。再继续操作内容时,会导致闪退

java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. Make sure your adapter calls notifyDataSetChanged() when its content changes.

一旦ListView等绑定了数据源,数据源发生了数据的增删改等操作后,需要调用notifydatasetchanged()等方法及时通知数据的变化。

————————————————

17.SecurityException 安全异常

权限问题

18.即使注册了xml中的清单文件

ActivityNotFoundException

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值