eclipse经常未响应手机app结束响应,无响应。怎么回事

Android开发中避免应用无响应的方法(Application Not Responding、ANR)
作者:冰冻鱼
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了Android开发中避免应用无响应的方法,即避免弹出Application Not Responding(ANR)对话框,需要的朋友可以参考下
App里发生的最糟糕的事是弹出应用无响应”Application Not Responding” (ANR) 对话框.本课讲的是如何保持应用响应,避免ANR。
什么触发ANR
通常,系统会在应用无法对用户输入响应时显示ANR。比如,如果一个应用在I/O操作上阻塞了(频繁请求网络)UI线程,系统无法处理用户输入事件。或者,在UI线程中,app花了大量时间在构建复杂的类,或在游戏中计算下一个动作。保证这些操作高效是很重要的,但最高效的代码也需要花费时间。
在任何情况下,都不要在UI线程执行耗时任务,取而代之的是创建 一个工作线程,在这个线程里操作。这可以保持UI线程运行,阻止系统因为代码卡住而结束应用。
在Android里,Activity Manager和Window Manager系统服务监控着应用的响应能力。Android会在检测到以下情形中之一时,弹出ANR对话框:
1.未在5秒内对用户输入事件响应
2.BroadcastReceiver未在10秒内执行完
如何避免ANR
Android应用默认运行在单线程里,叫UI线程或主线程。这意味着,你的应用所有工作都在UI线程里,如果花费很长时间才能完成,会触发ANR,因为此时应用无法操控输入事件或广播。
因此,UI 线程里的任何方法都应该尽可能地做轻量的工作,特别是Activity在生命周期方法,像onCreate(),onResume().潜在的耗时操作,像网络,数据库,或昂贵的计算(像改变图片大小)应该在工作线程里完成(或者在数据库操作案例里,通过一个异步请求)。
最高效的方法是为耗时操作使用AsyncTask类创建工作线程。继承AsyncTask实现doInBackground()方法来执行工作。要发送进度给用户,调用 publishProgress(),会触发onProgressUpdate(),例子:
private class DownloadFilesTask extends AsyncTask&URL, Integer, Long& {
&&& // Do the long-running work in here
&&& protected Long doInBackground(URL... urls) {
&&&&&&& int count = urls.
&&&&&&& long totalSize = 0;
&&&&&&& for (int i = 0; i & i++) {
&&&&&&&&&&& totalSize += Downloader.downloadFile(urls[i]);
&&&&&&&&&&& publishProgress((int) ((i / (float) count) * 100));
&&&&&&&&&&& // Escape early if cancel() is called
&&&&&&&&&&& if (isCancelled())
&&&&&&& return totalS
&&& // This is called each time you call publishProgress()
&&& protected void onProgressUpdate(Integer... progress) {
&&&&&&& setProgressPercent(progress[0]);
&&& // This is called when doInBackground() is finished
&&& protected void onPostExecute(Long result) {
&&&&&&& showNotification("Downloaded " + result + " bytes");
执行这个工作线程,只需要创建一个实例,调用 execute():
代码如下:new DownloadFilesTask().execute(url1, url2, url3);
尽管比AsyncTask更复杂,你可能还是想创建自己的线程或者HandlerThread类,如果这么做,你应该调用Process.setThreadPriority(THREAD_PRIORITY_BACKGROUND) 设置线程优先线为”background”.如果没有,线程仍然会拖慢应用,因为它跟UI线程优先级相同。
如果你实现Thread或HandlerThread,确保UI线程没有因为等待工作线程执行完而阻塞。不要调用Thread.wait()或Thread.sleep(),而是提供一个Handler,供任务执行完后回调。如此设计,UI线程会保持响应,避免出现ANR对话框。
特别强调BroadcastReceiver的执行时间,意味着你要:分散工作到后台线程里,像保存设置或者注册Notification。执行密集任务(intensive tasks),应该用IntentService。
提示:你可以用StrictMode帮你找到在UI线程上潜在的耗时操作
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具GDC 大会结束了,苹果春季发布会也结束了,前两周如同打了鸡血停都停不下来,想必关注...
虽说iPhone SE和iPad Pro严格意义上并不能说是全新设计的产品,但不少消费者对于苹果...
这款游戏的核心就是玩家之间的战斗,从朋友列表中选出个对手就能打得酣畅淋漓。
不管是移动设备还是桌面设备,花钱都方便起来的话,吃土的日子会更多吧。
这两天可能已经有不少锋友预定了 iPhone SE,正等着大干一场呢,拿到了新手机,为其装...
对比 iPhone 6s 来说,下一代 iPhone 显然还可以有非常多的改进空间,而不只是升级一...
这样说,那么如果一切都和6有关的话,也算是蛮有趣的~
今天iPhone SE正式开卖,你正在观望,想着要不要来一台?不着急,先看看我们的良心评...
刀塔的故事背景我想不少朋友已经很熟悉,再重复灌输难免显得有些啰嗦,详细的剧情小...
刚过去不久的 GDC上,曾经开发过《光明之神》、《点击青蛙》等游戏的 Playmous 向全球...
近日漫威公司在苹果商店当中推出了其新作《复仇者联盟2(Marvel: Avengers Alliance 2...
近日,游戏开发商 Adrian Kumorowski 在苹果商店当中推出了其新作《监狱和枪(Prison ...
近日,游戏开发商 Zero Games 在苹果商店中推出了新作《极限装置:爆破竞技场(Extreme...
本周,以该系列动画片为背景的冒险类手游《斯拉格精灵: 保护者战队》就正式登陆了苹果...
最早看到《葫芦娃》将被改编成手游的消息,其实小编的心情跟大家一样,是泪奔的。
3月23日极米科技在北京发布了全新的极米无屏电视H1。而威锋网也第一时间拿到了极米无...
苹果官方配件价格可能稍贵,但在品质方面也比较有保证,是这样吗?
在配件区推荐微软Office 365,这对苹果来说还是第一次,为了“生产力”几个字,苹果也...
购买 Apple Pencil 时额外附赠一个笔尖,如果你嫌不够现在可以购买替换笔尖了。
精织尼龙表带是全新的系列,共七种款式;如今 Apple Watch 最低只要 2288 元,该入手...
相比以往的 iPhone,这次 iPhone SE 配置不俗,价格还很亲民,国产厂商要伤脑筋了。
当然,首先你还需要一个售价 388 元人民币的 29W USB-C 电源适配器。
小尺寸当然要有小键盘,国行价格比 12.9 英寸 iPad Pro 所用的版本便宜 100 元。
app store 最近怎么老是进去没反应?
注册时间 最后登录
在线时间45 小时 UID
主题帖子人气
红苹果, 积分 212, 距离下一级还需 288 积分
怎么解决啊?我一般都是用4G wifi很少用
注册时间 最后登录
在线时间42 小时 UID
主题帖子人气
都一样 我的也是
注册时间 最后登录
在线时间10 小时 UID
主题帖子人气
我是WiFi状态进去没反应,一般先关了WiFi,切到运营商网络,进去后开始下载了再切回WiFi
注册时间 最后登录
在线时间42 小时 UID
主题帖子人气
没有啊,刚才一直在下载东西,正常啊。不过app store 不正常那是经常的事~
注册时间 最后登录
在线时间205 小时 UID
主题帖子人气
都一样,app store 武功全废了
注册时间 最后登录
在线时间126 小时 UID
主题帖子人气
一样 打开很慢 下载东西半天没反应 我还以为我家里网络怎么啦
注册时间 最后登录
在线时间362 小时 UID
主题帖子人气
wifi改了DNS 就下载正常了
注册时间 最后登录
在线时间480 小时 UID
主题帖子人气
app store 不正常是经常的事
威锋旗下产品
Hi~我是威威!
沪公网安备 29号 丨 沪ICP备号-1 丨 深公安网监备案号 5
增值电信业务经营许可证:
Powered by Discuz!

我要回帖

更多关于 excel经常无响应 的文章

 

随机推荐