WEB开发网
开发学院手机开发Android 开发 Android SDK 开发之应用程序基础 阅读

Android SDK 开发之应用程序基础

 2010-03-23 04:53:00 来源:WEB开发网   
核心提示:Broadcast receiver lifecycle一个broadcast receiver只有一个回调方法:void onReceive(Context curContext, Intent broadcastMsg)当一个关于broadcast receiver的广播消息到达时,android调用它的onRec

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一些

上一页  13 14 15 16 17 18 19  下一页

Tags:Android SDK 开发

编辑录入:coldstar [复制链接] [打 印]
赞助商链接