Android 常见Crash Log汇总
一、BinderProxy@4479b390 is not valid; is your activity running?
原因分析:
因为使用了AsyncTask 异步线程在线程完成以后的onPostExecute方法里面操作UI。这个时候如果用户在onPostExecute调用之间跳转了页面,这时activity已经onDestory了,那么就会报出android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@4479b390 is not valid; is your activity running?
解决办法:
1. 在修改UI之前使用Activity的isFinishing判断一下Activity是否还存在.
2. 在修改UI的时候捕获一下异常.
二、java.lang.NoSuchMethodError: android.app.ANRAppManager.dumpMessageHistory
原因分析:
Android是开源的系统,厂商获拿到源码后可以自由地定制和改造,当然,修改的过程可能带来一些不稳定的问题,会导致同样的代码,在一些特定的机型出现适配的问题。这个问题就是出现的很普遍的一个崩溃,异常信息如下所示:
java.lang.NoSuchMethodError: android.app.ANRAppManager.dumpMessageHistory
android.app.ActivityThread$ApplicationThread.dumpMessageHistory(ActivityThread.java:1177)
android.app.ApplicationThreadNative.onTransact(ApplicationThreadNative.java:609)
android.os.Binder.execTransact(Binder.java:351)
dalvik.system.NativeStart.run(Native Method)
先按照上面提到的思路,通过Android源码来分析问题的根源,找到ActivityThread
类,仔细检查,看到这个类里面并没有dumpMessageHistory
这个方法,也没有ANRAppManager
类,很明显这不是Android原生系统的方法,是被修改过的。再检查下出现这个崩溃的机型特点,发现也不是集中在某些机型上出现,对于这个问题,找到了一台出现这个崩溃的机器并重现出来了,得到的崩溃堆栈信息跟上面完全一样。
解决办法:
属于系统级别的问题,目前没有解决方案.
三、android.app.Fragment$InstantiationException — make sure class name exists, is public, and has an empty constructor that is public
解决办法:
若Fragement定义有带参构造函数,则一定要定义public的默认的构造函数。即可解决此问题。如果硬要携带参数进去,可以通过Intent结合Bunble的方式携带进去。
四、The final local variable xxx cannot be assigned, since it is defined in an enclosing type
错误分析:
The final local variable xxx cannot be assigned, since it is defined in an enclosing type“,其中xxx是一个局部变量名。首先这是一个java编译时的错误,翻译成中文是:不可变的局部变量不能被赋值,因为它已经被定义在一个封闭类型中。
解决办法:
如果将此变量声明为一个全局的变量,然后针对此数据做好相关的数据的内容控制即可。
五、Activity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView that was originally added here
异常场景:
经常在应用中需要处理一些耗时的工作,诸如读取大文件、访问网络资源等。为了避免因程序假死而带来的糟糕用户体验,通常我们可以通过线程+Handler或者Android提供的AsyncTask来解决该问题,并一般以ProgressDialog等提示性控件来告知用户当前的程序进度。而标题中描述的异常则会常常出现在这样的场景中,并且往往掩盖了导致异常的真正的罪魁祸首。
问题原因:
从异常描述中,大致的意思是存在窗口句柄泄露,即未能及时销毁某个PhoneWindow。而这往往误导了我们,把过多的精力放在查找所谓的内存泄露上了。其实存在这么一种情况,即因我们在非主线程中的某些操作不当而产生了一个严重的异常,从而强制当前Activity被关闭。而在关闭的同时,却没能及时的调用dismiss来解除对ProgressDialog等的引用,从而系统抛出了标题中的错误,而掩盖了真正导致这个错误的异常信息。
解决方法:
重写Activity的onDestroy方法,在方法中调用dismiss来解除对ProgressDialog等的引用。
六、Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri
日志内容:
Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=21235, uid=10285 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
异常场景:
在Android 6.0及以上的手机版本,做一些读取文件的操作,如读取图片的时候,如果没有申请权限,则会导致此问题。
解决办法:
在Manifest里面声明权限,在需要的时候,动态请求权限。
七、UnsatisfiedLinkError: JNI_ERR returned from JNI_OnLoad in
异常场景:Jar包中的Java方法调用Native方法的时候,出现链接失败
解决方法:检查混淆的设置,一般是Java层面的代码被混淆了,此时需要保证此区域的代码不被混淆
八、Timer already cancelled.
异常场景:一般与两种情况。1. cancel之前已经手动调用了一次cancel操作。2.timer运行的任务出错,导致Timer自动取消执行。
解决方法:一般是第二种错误场景为大多数出现的情况。建议优化运行任务的代码,对潜在的问题做好处理机制。
Android 常见Crash Log汇总的更多相关文章
- [Android] Android 常见第三方库汇总地址
Android 常见第三方库汇总地址 https://github.com/wasabeef/awesome-android-libraries List of Android Libraries T ...
- Android常见Crash原因总结(二)
Android平台程序崩溃大家都应该遇到过,force close和ANR应该是大家遇到较多的. 这里把Android平台程序崩溃的各种类型做一个简述和原因列举. 1.ANR(可见ANR): 发生场景 ...
- Android常见Crash类型分析(一)
问题1. java.lang.IllegalStateException: The specified child already has a parent. You must call remo ...
- Android Native/Tombstone Crash Log 详细分析(转)
转自:http://weibo.com/p/230418702c2db50102vc2h Android 虽然已经有好几年了,但是NDK的开放速度却非常缓慢,所以目前网络上针对对Android Nat ...
- android 常见死机问题--log分析
http://blog.csdn.net/fangchongbory/article/details/7645815 android 常见死机问题--log分析============ ...
- GitHub上史上最全的Android开源项目分类汇总 (转)
GitHub上史上最全的Android开源项目分类汇总 标签: github android 开源 | 发表时间:2014-11-23 23:00 | 作者:u013149325 分享到: 出处:ht ...
- Android 常见工具类封装
1,MD5工具类: public class MD5Util { public final static String MD5(String s) { char hexDigits[] = { '0' ...
- GitHub上史上最全的Android开源项目分类汇总
今天在看博客的时候,无意中发现了 @Trinea 在GitHub上的一个项目 Android开源项目分类汇总 ,由于类容太多了,我没有一个个完整地看完,但是里面介绍的开源项目都非常有参考价值,包括很炫 ...
- Android 开源项目分类汇总(转)
Android 开源项目分类汇总(转) ## 第一部分 个性化控件(View)主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Galler ...
随机推荐
- shell下批量重命名svn文件的方法
shell下批量重命名svn文件的方法 目标: 将svn目录下所有文件重命名 , 原文件前缀为 ucc_ , 批量改为 xmd_ 用tree看下当前svn目录 ucc_1.c ucc_1.h ucc_ ...
- 「2014-3-13」Javascript Engine, Java VM, Python interpreter, PyPy – a glance
提要: url anchor (ajax) => javascript engine (1~4 articles) => java VM vs. python interpreter =& ...
- Object-C内存管理的理解总结
今天看到了OC的内存管理这块,觉得很亲切. 自己的习惯是尽量自己掌控程序的空间和时间,有点强迫症的感觉.用C和C++做项目的时候,时时刻刻都在操心这new和delete的配对使用和计数,学习stl和b ...
- VS2008 工程只生成dll不生成lib的解决方案
http://topic.csdn.net/u/20081216/22/b12d1450-7585-4c9f-867a-7c181737c328.html 问题:vs2008版本的,不知道为什么只生成 ...
- XMPP即时通信(基础)
使用第三方框架 XMPPFramework #import "ViewController.h" #import "XMPPFramework.h" @ ...
- Use Hibernate core API
For Hibernate configuration, We can use hibernate.cfg.xml file to configure: <?xml version='1.0' ...
- JAVA使用POI操作excel
文中处理的excel是2003年以前的版本,使用HSSFworkbook,如果处理2007版本以后的excel,用XSSFworkbook,对于二者的兼容性问题,可参考 http://blog.csd ...
- 为什么没调用 didRegisterForRemoteNotificationsWithDeviceToken 和 didFailToRegisterForRemoteNotificationsWithError
一步一步按照网上 push notification 教程走下来,发现didRegisterForRemoteNotificationsWithDeviceToken 和 didFailToRegis ...
- WebApi Post提交报错 调试无法进入对应action函数
调试发现有长内容或者是特殊字符就报错,确定是服务端验证的问题 需要 在配置文件 <system.web> 中添加<httpRuntime requestValidationMode ...
- Xamarin.IOS之多视图
欢迎大家加入以下开源社区 Xamarin-Cn:https://github.com/Xamarin-Cn Mvvmcross-Cn:https://github.com/Mvvmcross-Cn ...