Android SDK 开发之应用程序基础
2010-03-23 04:53:00 来源:WEB开发网Broadcast receiver lifecycle
一个broadcast receiver只有一个回调方法:
void onReceive(Context curContext, Intent broadcastMsg)
当一个关于broadcast receiver的广播消息到达时,android调用它的onReceive()方法并将包含消息的intent对象传递给它。broadcast receiver只在它运行该方法时被认为是活跃的。当onReceive()返回时,它变为非活跃状态。
一个拥有活跃的broadcast receiver的进程被保护不被kill。但是一个只有不活跃的的component的进程可以在任何时候被系统kill掉,当其它进程需要内存时。
这会引入一个问题:当一个广播消息的响应非常耗时间时,需要新建一个新的线程来运行该操作。如果onReceive()创建了这个线程并返回,则整个进程,包括新创建的线程会被认为是非活动的(除非有其它的component为活动的),该线程有可能会被kill掉。解决方案是用onReceive()启动一个service并让该service完成这个工作,那么系统直到这个进程仍然是活跃的。
下一节将进一步讨论进程被kill的可能性。
Processes and lifecycles
Android 系统尝试尽可能长的维护一个应用程序进程,但最后它将在内存不足时把老的程序清除掉。为了决定哪些程序该保留、哪些程序应该kill,Android将每个进程放进一个重要性体系中,基于其中运行的component和它们的状态。重要性最低的进程最先被kill掉,以此类推。该体系中有5个等级:
一个前台进程是用户现在做的事情所需要的进程。一个进程满足下列任一条件即被认为是前台进程:
它正在运行一个正在和用户交互的activity(该Activity对象的onResume()方法被调用)。
它拥有一个被绑定到用户正在交互的activity上的service。
它有一个service对象正在运行onCreate(),onStart()或onDestroy()中的一个。
It has a BroadcastReceiver object that's executing its onReceive() method.
他有一个BroadcastReceiver对象正在运行onReceive()方法。
在某个时间,只有少数的前台进程会存在。它们只有在极端情况下被Kill——内存严重不足以至于它们不能都同时运行。一般的,在这个时间,设备达到了一个请求分页的状态,因此需要kill一些
更多精彩
赞助商链接