在创build它的Activity被破坏之后,Android线程会发生什么?

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

我在问,因为这个线程修改数据库中的重要数据,如果它突然死亡,应用程序可能会停止正常工作。

Solutions Collecting From Web of "在创build它的Activity被破坏之后,Android线程会发生什么?"

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

这是真的,但是你不能保证线程能维持多久。

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

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

这个线程是否会过早死亡?

如果是这样,有什么办法可以看到线程正在被杀死,并做了一些事情呢?

没有

我在问,因为这个线程修改数据库中的重要数据,如果它突然死亡,应用程序可能会停止正常工作。

你所描述的可以被归类为“关键任务”。 另外两个答案指出,一个服务将是一个更强大的做事方式,因为服务是在低内存情况下最后被“杀”的事情之一。 使用START_REDELIVER_INTENT可能有助于恢复正在执行的操作。

无论如何,如果你有一个“任务关键”的操作,你需要devise你的代码完全恢复,如使用交易和错误的情况下回滚的可能性。

这听起来像你应该把数据库更新到一个服务。 一旦活动进入后台,Android会假定其进程可以在必要时closures,稍后重新启动而不会产生任何不良影响。 有关更多信息,请参阅应用程序基础知识 。

您应该使用服务:

由于运行服务的进程比具有后台活动的进程高,因此启动长时间运行的活动可能会为该操作启动服务,而不是简单地创build工作线程,特别是如果操作可能最后的活动。

看看这里: 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; }