android主要活动和服务流程

时间:2013-05-20 14:11:23

标签: android service android-activity

我有主动和服务。 主要活动为服务准备数据。 服务消耗数据后,它会向mainactivity广播请求,mainactivity准备一些新数据并传递给服务...

mainactivity允许用户操纵数据。 如果不在前台,主要活动将被杀死。

<问题1]:我在这里有点困惑,我认为主要活动仍在这里,但它的UI线程和视图被清除了?所以我不能使用UI线程从视图中读取值,然后将数据发送到服务?

<问题2:问题2:如何检测被杀死的主要活动,然后服务可以切换到自己准备数据?

<问题3]:如何强制系统“杀死?”主要活动,所以我可以调试程序?

感谢

更新: 我读到图表可能有时间,但我仍然无法完全理解这种行为。事实上,我的问题更像是这样:从任务管理器,我的应用程序有1个活动和1个服务,消耗20MB内存。半小时后,我的应用程序有1个活动和1个服务,消耗1.5MB内存。显然,活动发生了什么事,那是什么? 请注意:我的活动使用UI thraad循环来准备要服务的数据。在停止/恢复时对UI活动没有影响,那我怎么知道UI线程活动什么时候会被杀死?


更新: 我用logcat测试过,(在onpause / onstop / ondestroy上调用..时添加日志消息),然而,当app内存从20mb下降到1.5mb时,没有调用。

05-21 23:33:27.709:我/ mytag(32012):调用onResume

05-21 23:33:30.606:我/ mytag(32012):调用onPause

05-21 23:33:31.596:我/ mytag(32012):呼叫onStop

[到目前为止,应用经理使用20mb内存显示我的应用]

05-21 23:36:05.176:D / skia(32012):从字体缓存清除144K [8个条目]

05-21 23:36:05.246:D / dalvikvm(32012):GC_EXPLICIT释放1240K,52%免费4329K / 8839K,外部1716K / 2137K,暂停54ms

05-22 00:00:10.226:D / dalvikvm(32012):GC_EXPLICIT释放933K,53%免费4226K / 8839K,外部1684K / 2137K,暂停85ms

05-22 00:36:10.166:D / dalvikvm(814):GC_EXPLICIT释放56K,49%免费2775K / 5379K,外部1625K / 2137K,暂停61ms

[到目前为止,应用经理使用1.5mb内存显示我的应用]

我等了半个小时,我没有得到任何更多的logcat文本,测试结束了。

我想检测该系统清理我的应用程序内存,但它不会触发任何“onpause,/ onstop等”,我如何检测它,然后告诉服务做某事?感谢

1 个答案:

答案 0 :(得分:1)

请查看活动生命周期。

http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

2和3的答案驻留在那里(为onStop或onDestroy实现一些东西,以“告诉”服务该活动被杀死/等)。 OnDestroy是唯一一个“真正”即将被杀的东西。

至于第一,我不完全理解你的问题,所以也许你可以更好地解释一下?我唯一想到的是你正在处理重新定位活动的方向更改(这可能会导致一些问题,具体取决于你如何创建/添加你的观点)。

编辑:从上面发布的链接..

- 如果活动失去焦点但仍然可见(即,新的非全尺寸或透明活动专注于您的活动之上),则会暂停活动。暂停的活动完全处于活动状态(它维护所有状态和成员信息并保持附加到窗口管理器),但在极低内存情况下可能被系统杀死。

- 如果某项活动被另一项活动完全遮挡,则会停止。它仍然保留所有状态和成员信息,但是,它不再对用户可见,因此它的窗口是隐藏的,当其他地方需要内存时,它通常会被系统杀死。

- 如果活动暂停或停止,系统可以通过要求完成活动或仅删除其进程来从内存中删除活动。当它再次显示给用户时,必须完全重新启动并恢复到之前的状态。