Zar*_*jio 18 java multithreading android android-activity
在我的Android应用程序中,主Activity有时会启动一个Thread来从服务器加载数据.该线程修改应用程序的数据库并编辑一些重要文件.AFAIK,似乎这个线程继续执行.如果Android进入低内存状态并决定终止整个应用程序,该线程会发生什么?这个线程可能会过早死亡吗?如果是这样,有什么方法我可以看到该线程被杀死,并做一些事情吗?
我问,因为这个线程修改了数据库中的重要数据,如果它突然被杀死,应用程序可能会停止正常运行.
Squ*_*onk 16
AFAIK,似乎这个线程继续执行.
这是事实,但你无法保证线程能保持多久.
如果Android进入低内存状态并决定终止整个应用程序,该线程会发生什么?
根据我的经验,这实际上是一种相当罕见的情况,但它取决于设备的可用内存和用户的行为,例如他们大量使用设备并启动多个应用程序.
这个线程可能会过早死亡吗?
是
如果是这样,有什么方法我可以看到该线程被杀死,并做一些事情吗?
没有
我问,因为这个线程修改了数据库中的重要数据,如果它突然被杀死,应用程序可能会停止正常运行.
你所描述的可以被归类为"关键任务".正如其他两个答案所指出的那样,服务将是一种更强大的服务方式,因为服务是在低内存情况下被"杀死"的最后一件事.使用START_REDELIVER_INTENT可能有助于恢复它正在做的事情.
在任何情况下,如果您有"关键任务"操作,则需要设计完全恢复的代码,例如事务的使用以及出现错误时回滚的可能性.
您应该使用服务:
因为运行服务的进程的排名高于具有后台活动的进程,所以启动长时间运行的活动可能会为该操作启动服务,而不是简单地创建工作线程 - 特别是如果操作可能比活动寿命长.
看看这里:http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html#Lifecycle(我粘贴的文本来自哪里)
小智 5
我可能正在挖掘一个旧线程,但没有人提到一件重要的事情。
每次使用数据库并修改多行时,都应该使用事务来确保数据在出现任何类型的故障(例如线程终止、套接字异常等)时保持有效。
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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6109 次 |
| 最近记录: |