gpt4 book ai didi

android mainactivity和服务流程

转载 作者:行者123 更新时间:2023-11-30 03:35:55 29 4
gpt4 key购买 nike

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

mainactivity 允许用户操作数据。如果 mainactivity 不在前台,有时它会被杀死。

[问题1]:我这里有点糊涂了,我觉得mainactivity还在,但是它的UI线程和view被清空了?所以我不能使用 UI 线程从 View 中读取值,然后将数据发送到服务?

[问题 2]:如何检测 mainactivity 被杀死,然后服务可以切换到自己准备数据?

[问题3]:如何强制系统'kill'? mainactivity 以便我可以调试程序?

谢谢

更新:我读过该图可能时间但我仍然不能完全理解这种行为。事实上,我的问题更像是这样:在任务管理器中,我的应用程序有 1 个 Activity 和 1 个服务,消耗了 20MB 内存。半小时后,我的应用程序有 1 个 Activity 和 1 个服务,消耗了 1.5MB 内存。显然, Activity 发生了一些事情,那是什么?请注意:我的 Activity 使用 UI thraad 循环来准备服务数据。 On stop/on resume 对 UI thead of activity 没有影响,那我怎么知道 UI thread activity 什么时候会被杀死呢?


更新:我用 logcat 进行了测试,(在调用 onpause/onstop/ondestroy 时添加日志消息..),但是,当应用程序内存从 20mb 下降到 1.5mb 时,没有调用任何消息。

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

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

05-21 23:33:31.596: I/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 等”,我如何检测它,然后告诉服务做某事?谢谢

最佳答案

请查看 Activity 生命周期。

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

2 和 3 的答案就在那里(为 onStop 或 onDestroy 实现一些东西来“告诉”服务该 Activity 正在被杀死/等等)。 OnDestroy 是唯一“真正”将要被杀死的时间。

关于第一个问题,我不完全理解你的问题,所以也许你可以更好地解释一下?关于第一点,我唯一的想法是您正在处理重新创建 Activity 的方向更改(这可能会导致一些问题,具体取决于您创建/添加 View 的方式)。

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

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

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

-如果一个 Activity 被暂停或停止,系统可以通过要求它完成或简单地杀死它的进程来从内存中删除该 Activity 。当它再次显示给用户时,必须完全重启并恢复到之前的状态。

关于android mainactivity和服务流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16651441/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com