前言:
ServiceTimeout(20 seconds)小概率类型Service在特定的时间内无法处理完成,会造成ANR — 应用程序无响应(ANR:Application Not Responding)的情况
▲ 分析 :
避免ANR最核心的一点就是在主线程减少耗时操作。这时我们建议使用intentService处理。intentService是一个异步的,会自动停止的服务,很好解决了传统的Service中处理完耗时操作忘记停止并销毁Service的问题
▲ 区别 :
1. 首先IntentService是继承自Service;
2. Service不是一个单独的进程,它和应用程序在同一个进程中;
3. Service也不是一个线程,所以我们要避免在Service中进行耗时的操作;
4. IntentService使用队列的方式将请求的Intent加入队列,然后开启了一个Worker Thread(工作线程)在处理队列中的Intent,对于异步的startService请求,
IntentService会处理完成一个之后在处理第二个,每一个请求都会在一个单独的Worker Thread中处理,不会阻塞应用程序的主线程。
因此,如果我们如果要在Service里面处理一个耗时的操作,我们可以用IntentService来代替使用。
5. 使用IntentService 必须首先继承IntentService并实现onHandleIntent()方法,将耗时的任务放在这个方法执行,其他方面,IntentService和Service一样。
▲ 例子 :
Service_demo
IntentService_demo
TextServiceActivity
登录 | 立即注册