在创建 Android 线程的活动被销毁后,该线程会发生什么情况?

在我的Android应用程序中,主活动有时会启动一个线程以从服务器加载数据。此线程修改应用程序的数据库并编辑一些重要文件。AFAIK,看起来这个线程继续执行。如果Android陷入内存不足的情况并决定杀死整个应用程序,此线程会发生什么?如果这个线程可能过早死亡,会不会有这种情况?如果是这样,有没有办法看到线程被杀死,并对此做些什么?

我之所以问这个问题,是因为这个线程修改了数据库中的重要数据,如果它突然被杀死,应用程序可能会停止正常运行。


答案 1

AFAIK,看起来这个线程继续执行。

这是真的,但你不能保证线程会保持多长时间。

如果Android陷入内存不足的情况并决定杀死整个应用程序,此线程会发生什么?

根据我的经验,这实际上是一个相当罕见的情况,但它将取决于设备的可用内存和用户的行为,例如他们大量使用设备并启动多个应用程序。

如果这个线程可能过早死亡,会不会有这种情况?

是的

如果是这样,有没有办法看到线程被杀死,并对此做些什么?

我之所以问这个问题,是因为这个线程修改了数据库中的重要数据,如果它突然被杀死,应用程序可能会停止正常运行。

你所描述的可以被归类为“关键任务”。正如其他两个答案所指出的那样,服务将是一种更强大的做事方式,因为服务是在低记忆的情况下最后被“杀死”的东西之一。使用START_REDELIVER_INTENT可能有助于恢复它正在做的事情。

在任何情况下,如果您有“关键任务”操作,则需要设计代码以进行完全恢复,例如使用事务以及在发生错误时回滚的可能性。


答案 2

听起来你应该将数据库更新移动到服务。一旦活动进入后台,Android就会认为其进程可以在必要时被杀死,并在以后重新启动而不会产生不良影响。有关详细信息,请参阅应用程序基础知识


推荐