Android中Receiver处理机制禁忌小结

转载:http://blog.21er.net/?p=56


最近准备freeze产品代码,所以会做很多测试,比如:

1、Monkey Test,这个测试是程序模拟出一个调皮的猴子,对屏幕的某个功能面板,进行各种各样的点击测试。
2、Power Cycle Test,这个是对CellPhone不断进行关机开机操作的测试。

我最近在解决这两个测试中报告的问题中,发现了一个程序的通病,即犯了Receiver中的处理禁忌——执行大量耗时程序。

一般来讲,当一个程序没有响应的时候,会报告ANR(Application Not Response)错误。ANR产生最常见的一种情况是对屏幕操作没有响应,另一种是BroadCast出去的信息在Reciever中处理时间过长,这时会有ANR。

所以在Reciever中尽量保证程序的不阻塞性,例如startservice是一种很好的方法,而startactivity并不是一种很好的方法,另外,在Reciever中开启AsyncTask很多时候也不是正确的方法。

Receiver中防止发生ANR,必须遵守的原则:
1、尽量不使用StartActivity
2、不使用子线程
3、不使用耗时阻塞操作
我们称SendBroadCast是由Context发起的,它一般就是Activity的实例Context或者Service本身,因此,他是一个UI线程,阻塞UI线程并不是一件好事。


你可能感兴趣的:(Android中Receiver处理机制禁忌小结)