错误堆栈:

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问题的更多相关文章

  1. 谈谈 ANR 之 Service 超时

    1. 核心源码 关键类 路径(/frameworks/base/) ActiveServices.java services/core/java/com/android/server/am/Activ ...

  2. ANR问题分析实例

    ANR监测机制包含三种: Service ANR,前台进程中Service生命周期不能超过20秒,后台进程中Service的生命周期不能超过200秒. 在启动Service时,抛出定时消息SERVIC ...

  3. Service是什么?Service又不是什么?

    在Android王国中,Service是一个劳动模范,总是默默的在后台运行,无怨无悔,且总是干最脏最累的活,比如下载文件,倾听音乐,网络操作等这些耗时的操作,所以我们请尊重的叫他一声:"劳模 ...

  4. Android ANR 分析解决方法

    一:什么是ANR ANR:Application Not Responding,即应用无响应 二:ANR的类型 ANR一般有三种类型: 1. KeyDispatchTimeout(5 seconds) ...

  5. android ANR产生原因和解决办法

    转自http://blog.sina.com.cn/s/blog_618199e60101kvbl.html ANR (Application Not Responding) ANR定义:在Andro ...

  6. Android探索之Service全面回顾及总结

    什么是Service? Service(服务)是Android提供的四大组件之一,是一个没有用户界面的在后台运行执行耗时操作的应用组件.其他应用组件能够启动Service,并且当用户切换到另外的应用场 ...

  7. Android开发6:Service的使用(简单音乐播放器的实现)

    前言 啦啦啦~各位好久不见啦~博主最近比较忙,而且最近一次实验也是刚刚结束~ 好了不废话了,直接进入我们这次的内容~ 在这篇博文里我们将学习Service(服务)的相关知识,学会使用 Service ...

  8. Android 四大组件之再论service

    service常见的有2种方式,本地service以及remote service. 这2种的生命周期,同activity的通信方式等,都不相同. 关于这2种service如何使用,这里不做介绍,只是 ...

  9. Android 四大组件之Service

    ---恢复内容开始--- 1,Service的生命周期

随机推荐

  1. 了解git /github

    一 GIT是什么? Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.Git ...

  2. HDU 4757 Tree(可持续化字典树,lca)

    题意:询问树上结点x到结点y路上上的权值异或z的最大值. 任意结点权值 ≤ 2^16,可以想到用字典树. 但是因为是询问某条路径上的字典树,将字典树可持续化,字典树上的结点保存在这条路径上的二进制数. ...

  3. ACM-ICPC (10/12)

    01分数规划 背景:根据楼教主回忆,曾经在一场比赛中秒掉了一道最优比例生成树问题,导致很多人跟风失败,最终悲剧. 什么是01分数规划呢? 这样的等式求最大,最小即为01分数规划.  如果你不知道该如何 ...

  4. [19/03/22-星期五] 异常(Exception)(二)_捕获异常

    一.概念 捕获异常是通过3个关键词来实现的:try-catch-finally.用try来执行一段程序,如果出现异常,系统抛出一个异常,可以通过它的类型来捕捉(catch)并处理它, 最后一步是通过f ...

  5. css实现单行的靠左靠右和居中效果

    1.父元素    text-align:center 2.子元素 .left{ float:left; } .right{ float:right; } .center{ display:inline ...

  6. 用java语言编写的简单二叉树

    package com.cjonline.foundation.evisa; public class TestTree { private int data=-1; private TestTree ...

  7. [转]Matlab2012b安装详解

    matlab2012b安装文件下载: http://yunpan.cn/cVY5VsSeUXzai (提取码:ec84) 1.双击setup.exe进行安装.安装中选择“不使用Internet安装” ...

  8. lucene&solr学习——solr学习(一)

    1.什么是solr solr是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文检索服务器.Solr提供了比lucene风味丰富的查询语言,同时实现了可配置,可扩展,并对索 ...

  9. Java集合框架之Set接口

     1.Set接口不记录元素添加顺序的误区 public  void setDemo(){        Set<String> set1 = new HashSet<>();  ...

  10. 统计iOS产品不同渠道的下载量

    如何统计iOS产品不同渠道的下载量? 一.前言 在开发过程中,Android可能会打出来很多的包,用于标识不同的商店下载量.原来觉得苹果只有一个商店:AppStore,如何做出不同来源的统计呢?本篇文 ...