在创建它的Activity被销毁后,Android线程会发生什么?

在我的Android应用程序中,主Activity有时会启动一个Thread来从服务器加载数据。 该线程修改应用程序的数据库并编辑一些重要文件。 AFAIK,似乎这个线程继续执行。 如果Android进入低内存状态并决定终止整个应用程序,该线程会发生什么? 这个线程可能会过早死亡吗? 如果是这样,有什么方法可以看出线程被杀死了,并为此做点什么?

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

AFAIK,似乎这个线程继续执行。

这是事实,但你无法保证线程能保持多久。

如果Android进入低内存状态并决定终止整个应用程序,该线程会发生什么?

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

这个线程可能会过早死亡吗?

如果是这样,有什么方法可以看出线程被杀死了,并为此做点什么?

没有

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

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

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

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

您应该使用服务:

因为运行服务的进程的排名高于具有后台活动的进程,所以启动长时间运行的活动可能会为该操作启动服务,而不是简单地创建工作线程 – 特别是如果操作可能比活动寿命长。

看看这里: http : //developer.android.com/guide/topics/fundamentals/processes-and-threads.html#Lifecycle (我粘贴的文本来自哪里)

我可能正在挖掘一个旧线程,但没有人提到一个重要的事情。

每次使用数据库并修改多行时,都应该使用事务来确保数据在出现任何types的故障时保持有效(例如,可能是线程终止,套接字exception等)。

  try{ db.beginTransaction(); //Do whatever you need to do... db.setTransactionSuccessful(); }catch(SQLiteException e){ Log.e("SQLite","Error while updating rows: " + e.getMessage()); }finally{ db.endTransaction(); //Commit (if everything ok) or rollback (if any error occured). db.close(); //Close databse; }