0

我有一个警报应用程序,用户可以在其中设置多个警报。当警报响起时(使用 AlarmManager 和 BroadcastReceiver),应用程序只会显示一个通知。

我的应用可能长时间不在前台,因此不会有 UI 线程运行。

我的问题是,当警报响起并显示通知时,我的应用程序的部分代码会被执行(广播接收器和通知创建)。接下来发生什么?我的应用程序的进程是否立即被杀死?在 Android 决定杀死它之前,它是否会一直处于空闲状态?

(这都与关于持久通知 ID 的另一个问题(http://stackoverflow.com/questions/11376294/do-i-need-to-persist-my-notification-ids)有关。当我的应用程序未在前台和两个警报相隔一分钟,我将通知 ID 存储在静态 ArrayList 中。在第二个通知创建时使用调试器,似乎我的通知创建者类仍然在 ArrayList 中保存第一个通知的 ID。这表明该过程介于第一个和第二个警报响起之间。)

4

2 回答 2

1

Android 在这里有一些文档:Activity | 进程生命周期 这一切都取决于系统有多少内存和进程的类型。对于 BroadcastReceivers 来说,当设备内存不足时,它们似乎首先被杀死,但如果不是,它们会持续存在。

于 2012-07-07T16:02:12.340 回答
1

接下来发生什么?

给定你的头像,你就有了一个茶点。或者可能是一品脱,这取决于一天中的时间和饮料偏好。

:-)

我的应用程序的进程是否立即被杀死?

可能不是。

在 Android 决定杀死它之前,它是否会一直处于空闲状态?

是的。当 Android 需要 RAM 来启动其他进程时,它会终止进程。如果您的进程没有正在运行的组件,它将在要终止的进程列表中相对较高。BroadcastReceiver因此,您的流程可能不会存活很长时间,但您的结束与被终止的流程之间没有直接的因果关系。

当我的应用程序没有在前台运行并且两个警报相隔一分钟时,我将通知 ID 存储在静态 ArrayList 中。在创建第二个通知时使用调试器,我的通知创建者类似乎仍然在 ArrayList 中保存第一个通知的 ID。这表明该过程存在于第一个和第二个警报响起之间。

警报之间只有一分钟,您的进程可能会持续存在是合理的,但这不能保证。当然,每分钟不断地运行警报不太可能让您非常受欢迎,因此请确保用户对这种行为有一定的控制权(例如,可以完全停止您的应用程序,可以修改轮询周期)。

于 2012-07-07T16:04:30.853 回答