导致android app Force Close原因,如何规避
一,
Force Close,意为强行关闭,当前应用程序发生了冲突。简称FC。
NullPointExection(空指针),IndexOutOfBoundsException(下标越界),就连Android API使用的顺序错误也可能导致(比如setContentView()之前进行了findViewById()操作)等等一系列未捕获异常。
偶尔一次的FC 可以不用台在意。 但是常常发生FC就一定要引起重视, FC是一种非常严重的问题。
二, 规避:
1, 可以实现Thread.UncaughtExceptionHandler接口的uncaughtException方法。再补充一句,想要哪个线程可以处理未捕获异常,Thread.setDefaultUncaughtExceptionHandler( this); 这句代码都要在那个线程中执行一次
在uncaughtException方法中,第一个参数是线程,第二个参数是异常。
成功捕获到了异常,而且activity也退出了,可是并不是安全退出,因为当你再次点击打开apk时,发现程序无响应。
为了解决上述问题,我在uncaughtException方法里将进程杀死,杀死进程有好多中方法,在此列举一个自杀式方法
android.os.Process.killProcess(android.os.Process.myPid());
参考:http://www.jb51.net/article/90176.htm
2, Forceclose这类问题主要通过Thread.UncaughtExceptionHandler这个类来捕获异常。通过实现类里面的方法uncaughtException来实现应用在捕获到异常后进行相关的处理。一般这里处理基本放在应用的Application类中。
同样的对于ANR问题,应用也可以做相关处理。对ANR,我们可以这样处理。通过一个看门狗来实时的检测主线程,一旦主线程发生阻塞,则通知Application 做相关处理。
主要方法是在线程中每隔一段时间(Activity一般是5S,广播一般是10S),向主线程发送一个messager,使计数器加1,如果到点没有加1,则表明主线程阻塞。
3, 在代码开发的过程中要思维缜密,做到逻辑严密,善于try catch, 注意代码规范。同时测试也尽量多的去覆盖。 就能很大程度上避免上市后的FC 。
参考:https://www.2cto.com/kf/201504/393309.html
三,和ANR的区别
参考:https://blog.csdn.net/lin111000713/article/details/52459888
ANR,程序没有响应,有可能程序会再次响应
例子:
应用运行时,Main线程进行了耗时操作
应用运行时,用户操作过于频繁
Force close:程序抛出异常,会强制退出
例子:
应用运行时抛出了OutOfMemoryError,
应用运行时抛出了RuntimeException
出现场景
ANR出现场景:
主线程被IO操作(从4.0之后网络IO不允许在主线程中)阻塞。
主线程中存在耗时的计算
主线程中错误的操作,比如Thread.wait或者Thread.sleep等
Android系统会监控程序的响应状况,一旦出现下面情况,则弹出ANR对话框
在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。
默认情况下,在android中Activity的最长执行时间是5秒,BroadcastReceiver的最长执行时间则是10秒。超出就会提示应用程序无响应(ANR:Application Not Responding)对话框。
三种常见类型
1: KeyDispatchTimeout(5 seconds) -- 主要类型
按键或触摸事件在特定时间内无响应
2 : BroadcastTimeout(10 seconds)
BroadcastReceiver在特定时间内无法处理完成
3: ServiceTimeout(20 seconds) -- 小概率类型
Service在特定的时间内无法处理完成
Force close出现场景(一般是异常情况):
比如空指针、数组越界、类型转换异常等等。
捕获:可以通过logcat查看抛出异常的代码出现的位置,然后到程序对应代码中进行修改。
四,下列哪些情况下系统会程序抛出异常,强制退出(不定项选择)
应用运行时,Main线程进行了耗时操作
应用运行时抛出了OutOfMemoryError
应用运行时抛出了RuntimeException
应用运行时,用户操作过于频繁
导致android app Force Close原因,如何规避相关推荐
- android app闪退原因总结分析
存储不够 缓存过多,剩余空间不够(针对内存): 后台任务太多,导致运存不够(针对运存) App和SDK版本不兼容 sdk版本明显低于app,高版本app调用低版本SDK没有的API: 不同版本间API ...
- android 服务开机启动慢,Android App启动慢原因
一.App启动方式: 冷启动(Cold Start).温启动(Warm start).热启动(Hot start) 1. 冷启动(Cold Start):是指App启动后第一次运行,获取App进程杀 ...
- Android中app卡顿原因分析示例
http://www.cnblogs.com/zhucai/p/weibo-graphics-performance-analyse.html 朱才 专注于Android图形动画 MIUI工程师 博客 ...
- Android App定位和规避内存泄露方法研究
from:http://site.douban.com/android/widget/notes/350758/note/167481484/ 工作中刚好用到,网上搜到的,觉得不错,与大家分享 And ...
- Android 系统(55)---Android App开发之ANR异常的原因分析及处理总结
Android App开发之ANR异常的原因分析及处理总结 Android App开发之ANR异常的原因分析及处理总结 ANR的全称是application not responding,根据它的意思 ...
- 可能导致Android手机死机的原因
死机现象: 1. 死机/phong hang 定义 当手机长时间无法再被用户控制操作时,我们称为死机或者hang 机. 在这里我们强调长时间,如果是短时间,我们归结为Perfomance 问题,即性能 ...
- 〖Android〗Android App项目资源字符串检查(检查是否缺少对应的翻译,导致系统切换语言后崩溃)...
Android项目开发过程中,容易出现缺少对应中英文翻译的情况,这个Python脚本是用于检查字符串是否缺少了对应的翻译 1 #!/usr/bin/env python 2 # encoding: u ...
- android启动画面白屏,Android app启动时黑屏或者白屏的原因及解决办法
1.产生原因 其实显示黑屏或者白屏实属正常,这是因为还没加载到布局文件,就已经显示了window窗口背景,黑屏白屏就是window窗口背景. 示例: 2.解决办法 通过设置设置Style (1)设置背 ...
- android app被回收,Android app被回收之后会导致的问题
当android app被回收之后,再次点击图标会回到最后打开的页面,但是一些数据已经被回收了,直接打开可能会报空指针异常之类的,我们可以判断是否被回收,然后重启app public class St ...
最新文章
- Javascript导航菜单13则
- mysql写放大,canvas实现图片根据滑块放大缩小效果
- Linux Kernel aarch64的ARM-CE aes-ecb的底层代码导读
- java旺季机票_java-第四章-机票价格受到淡季旺季的影响,编写的小程序
- 网络知识:整理各种路由器组网方法!网跨段也能访问!
- IdentityServer4之Authorization Code(授权码)相对更安全
- 小程序真机测试「启动参数」解析出错问题
- Maven依赖下载速度慢,不用怕,这么搞快了飞起
- ffmpeg 安装bzlib_编译安装ffmpeg 要支持xvid、x264、mp3、ogg、amr、faac
- 手机测试兼容性的工具
- 移动硬盘打不开,换一台电脑就又可以打开了
- abs在c 语言中的作用是什么意思,abs什么意思 c语言中abs是什么意思
- bios 微星click_微星发表全新搭载图形化『Click BIOS』主机板 采用最新UEFI架构 迎接全图形化BIOS调教新时代...
- 细节决定成败,聊聊防御性编程
- 工程打包是什么意思_项目打包命令的意思
- 硬盘安装ubuntu 14.04 LTS
- python三国演义人物 统计分析_Python统计三国演义主要人物出场次数
- 进销存软件哪个简单好用?来看看这5款
- 一年节气查询阳历日期与节气名称
- 数学教育与计算机教育的新讲座的心得体会,数学新课程培训心得体会(精选7篇)...