Service ANR问题
错误堆栈:
ActivityManager: ANR in com.oppo.reader PID: 8071
Reason: executing service com.oppo.reade//com.zhangyue.iReader.service.VoiceService
这个问题只在oppo A53 2G的运行内存手机上出现。 android 5.1
错误分析:
有这个问题,我第一反应是:com.zhangyue.iReader.service.VoiceService 这个service里面有超时的问题,但是,我把这个Service 里面的所有代码都注释掉了。还是有ANR!
我说,难道单独写一个Service 在这个手机上,什么都不做也会ANR? 我写了一个demo,人还是不能懒得。然后发现,没有问题。说明,和这个手机没有关系。
然后我就无语了。我就告诉我们老大,说:我把这个Service 里面的所有代码都注释掉了。还是有ANR!当时我们老大说,这只能说明,产生这个问题和这个Service没有关系!我竟然没有推理出这样的结论,恨自己!说明出问题的地方不在这里!
后来他说让我try catch 一个启动服务的地方:
Context context = IreaderApplication.getInstance();
Intent intent = new Intent(context, VoiceService.class);
intent.putExtra("list", (ArrayList) playlist);
intent.putExtra("name", bookName);
intent.setAction(VoiceService.ACTION_SET_PLAYLIST);
context.startService(intent);
我加上try catch ,发现还是会ANR! 我就觉得和try catch 没关系,因为如果发生了异常,肯定当时就崩溃了。不会20s之后ANR. 然后他说,你把这块代码注释掉,注释掉之后,果然没有问题了!
也就是问题是由于这一坨代码产生的。因为这段代码设置了一个action,我去调试,断点这个Service 的ACTION_SET_PLAYLIST这里,发现根本没有走到这里来。说明服务没有启动起来。 但是其他的action 都可以启动起来!
这里会传递一个playlist的ArrayList, 我调试的时候,发现他有980多条!这么大的数据,导致启动服务的时候,ANR了。我擦,这么大的数据,你竟然putExtra 去传递!怪不得有问题。
解决问题:
这个playlist,我就换一种传递方式。比如写个DataManage, 里面有个set 方法,你把数据设置进去就可以了。我其他地方要取用的话,直接get 拿到数据就可以了。
总结
1.禁止启动四大组件的时候,在Intent 里面传递过大的数据!可能导致ANR。
2.这个问题只在oppo A53 2G的运行内存手机上出现。 android 5.1 说明该手机太差劲了。有些问题就喜欢在一些很差劲的手机上面出现。
3.这种ANR 问题,App 是无法拿到信息的。只有手机room厂商才能拿到。很无奈。所以,市面上有多少这种问题,不得而知。当时是用户反馈,才知道这个问题的。
Service ANR问题的更多相关文章
- 谈谈 ANR 之 Service 超时
1. 核心源码 关键类 路径(/frameworks/base/) ActiveServices.java services/core/java/com/android/server/am/Activ ...
- ANR问题分析实例
ANR监测机制包含三种: Service ANR,前台进程中Service生命周期不能超过20秒,后台进程中Service的生命周期不能超过200秒. 在启动Service时,抛出定时消息SERVIC ...
- Service是什么?Service又不是什么?
在Android王国中,Service是一个劳动模范,总是默默的在后台运行,无怨无悔,且总是干最脏最累的活,比如下载文件,倾听音乐,网络操作等这些耗时的操作,所以我们请尊重的叫他一声:"劳模 ...
- Android ANR 分析解决方法
一:什么是ANR ANR:Application Not Responding,即应用无响应 二:ANR的类型 ANR一般有三种类型: 1. KeyDispatchTimeout(5 seconds) ...
- android ANR产生原因和解决办法
转自http://blog.sina.com.cn/s/blog_618199e60101kvbl.html ANR (Application Not Responding) ANR定义:在Andro ...
- Android探索之Service全面回顾及总结
什么是Service? Service(服务)是Android提供的四大组件之一,是一个没有用户界面的在后台运行执行耗时操作的应用组件.其他应用组件能够启动Service,并且当用户切换到另外的应用场 ...
- Android开发6:Service的使用(简单音乐播放器的实现)
前言 啦啦啦~各位好久不见啦~博主最近比较忙,而且最近一次实验也是刚刚结束~ 好了不废话了,直接进入我们这次的内容~ 在这篇博文里我们将学习Service(服务)的相关知识,学会使用 Service ...
- Android 四大组件之再论service
service常见的有2种方式,本地service以及remote service. 这2种的生命周期,同activity的通信方式等,都不相同. 关于这2种service如何使用,这里不做介绍,只是 ...
- Android 四大组件之Service
---恢复内容开始--- 1,Service的生命周期
随机推荐
- 了解git /github
一 GIT是什么? Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.Git ...
- HDU 4757 Tree(可持续化字典树,lca)
题意:询问树上结点x到结点y路上上的权值异或z的最大值. 任意结点权值 ≤ 2^16,可以想到用字典树. 但是因为是询问某条路径上的字典树,将字典树可持续化,字典树上的结点保存在这条路径上的二进制数. ...
- ACM-ICPC (10/12)
01分数规划 背景:根据楼教主回忆,曾经在一场比赛中秒掉了一道最优比例生成树问题,导致很多人跟风失败,最终悲剧. 什么是01分数规划呢? 这样的等式求最大,最小即为01分数规划. 如果你不知道该如何 ...
- [19/03/22-星期五] 异常(Exception)(二)_捕获异常
一.概念 捕获异常是通过3个关键词来实现的:try-catch-finally.用try来执行一段程序,如果出现异常,系统抛出一个异常,可以通过它的类型来捕捉(catch)并处理它, 最后一步是通过f ...
- css实现单行的靠左靠右和居中效果
1.父元素 text-align:center 2.子元素 .left{ float:left; } .right{ float:right; } .center{ display:inline ...
- 用java语言编写的简单二叉树
package com.cjonline.foundation.evisa; public class TestTree { private int data=-1; private TestTree ...
- [转]Matlab2012b安装详解
matlab2012b安装文件下载: http://yunpan.cn/cVY5VsSeUXzai (提取码:ec84) 1.双击setup.exe进行安装.安装中选择“不使用Internet安装” ...
- lucene&solr学习——solr学习(一)
1.什么是solr solr是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文检索服务器.Solr提供了比lucene风味丰富的查询语言,同时实现了可配置,可扩展,并对索 ...
- Java集合框架之Set接口
1.Set接口不记录元素添加顺序的误区 public void setDemo(){ Set<String> set1 = new HashSet<>(); ...
- 统计iOS产品不同渠道的下载量
如何统计iOS产品不同渠道的下载量? 一.前言 在开发过程中,Android可能会打出来很多的包,用于标识不同的商店下载量.原来觉得苹果只有一个商店:AppStore,如何做出不同来源的统计呢?本篇文 ...