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的生命周期
随机推荐
- 多目标规划——fgoalattain
多目标规划 多个目标函数,之间可以用他们的重要程度分析,来一次进行这个序贯算法,当然也可以无限逼近的方案—— clc,clear; % 约束 a = [- - - - ]; b = [- - ]; ...
- 【luogu P1307 数字反转】 题解
题目链接:https://www.luogu.org/problemnew/show/P1307 刚入门的一道字符串模拟,分四种情况讨论来做比较好. #include<iostream> ...
- centos修改hostname
1.临时修改 hostname localhost 2.永久修改 vim /etc/sysconfig/network 修改hostname的值后保存
- grunt_beginner
前端集成解决方案:一套包含框架 和 工具,便于开发者快速构建美丽实用的web应用程序的工作流,同时 这套工作流必须是稳健强壮的. Yeman Bower web包管理器 框架.库.公共部分 Grunt ...
- oracle 的分页查询与mysql 的分页查询
oracle 的分页查询: select * from (select o.*,rownum rn from Persons o) where rn >40 and rn <=60 : ...
- CTRL+F5 和F5 两种刷新有什么区别
- 3930: [CQOI2015]选数
Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1958 Solved: 979[Submit][Status][Discuss] Descripti ...
- c++cmb
#include<windows.h> #include<bits/stdc++.h> using namespace std; ]; int main() { printf( ...
- poj 2186 Popular Cows :求能被有多少点是能被所有点到达的点 tarjan O(E)
/** problem: http://poj.org/problem?id=2186 当出度为0的点(可能是缩点后的点)只有一个时就存在被所有牛崇拜的牛 因为如果存在有两个及以上出度为0的点的话,他 ...
- ABAP术语-Application Server
Application Server 原文:http://www.cnblogs.com/qiangsheng/archive/2007/12/17/1002777.html Server that ...