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 ...
随机推荐
- 猿团YTFCloud--5分钟自制APP,开发从未如此简单
9月15日,YTFCloud将正式开启内测, 这意味着猿团YTF框架产品线全面升级.同时,公测过后,YTFCloud的APP线上DIY服务将面向所有用户,让人人都能成为APP“开发商”. 什么是YTF ...
- Method not found : Void System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior(Boolean)
找不到方法:“Void System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior(Boolean) ...
- MATLAB的crack安装小曲
MATLAB的crack安装小曲 本学期要学数学模型和数值分析,需要用MATLAB,便琢磨着装MATLAB.我同专业的同学会装MATLAB的crack,他是数学协会的理事长,平时爱吹牛,问他一个简单的 ...
- C# 获取本机指定类型指定网卡的Ip地址
1.简单方式 ,适用于单网卡 string hostName = Dns.GetHostName(); IPAddress[] addresses = Dns.GetHostAddresses(hos ...
- js在head里插入style样式
代码如下: var nod = document.createElement('style'), str = 'body{background:#000;color:#fff} a{color:#ff ...
- JQuery按回车提交数据
引入JQuery文件 <script src="JS/jquery-1.9.1.js" type="text/javascript"></sc ...
- java基础4_字符串
一 字符串 Java字符串关键字是String,是一个类,创建新的字符串即创建一个新的对象. 1.字符串的声明及初始化. String str; //只做声明 String str1="aa ...
- maven创建 web项目
Maven教程初级篇03: 创建Web应用 1. 使用如下命令创建Web应用: 代码 mvn archetype:generate -DgroupId=net.jianxi.tutorials.mav ...
- MySQL 升级详细步骤 (包括 Percona)
MySQL 升级步骤 MySQL 5.1.72 升级到 MySQL 5.5.36 鉴于我在升级的时候遇到的麻烦问题,我觉得有必要把一些细节说清楚,免得引起误解了.感觉官方文档上的升级步骤写的比较简单, ...
- RCP:为指定的导航器添加上下文菜单
可以参考Eclipse的Help->Help Content下的: Platform Plug-in Developer Guide > Programmer's Guide > P ...