如果服务停止,后台线程会发生什么?

时间:2012-10-17 22:27:13

标签: android service android-widget

如果我有一个Android服务,在onStartCommand中有以下内容:

MyWidgetUpdater updater = new MyWidgetUpdater();
updater.updateWidgets(...);

updater检索后台线程中的数据,然后更新前台线程上的窗口小部件。如果服务在后台处理完成之前停止(例如stopSelf())会发生什么?这会导致小部件有时无法完成更新(因为线程可能被杀死)?如果是这样,是否有设计模式可以知道您的所有小部件何时完成更新并且可以安全地停止服务?

1 个答案:

答案 0 :(得分:3)

  

如果服务在后台处理完成之前停止(例如stopSelf())会发生什么?

假设这是你自己分叉的一个线程,Android会忘记那个线程,它将继续运行,泄露,直到Android终止你的进程。

  

如果是这样,是否有设计模式可以知道您的所有小部件何时完成更新并且可以安全地停止服务?

在工作完成之前,请勿致电stopSelf()。我不知道你在哪里调用stopSelf(),但是在你引用的模式中,它通常会在该线程的末尾完成。

这是IntentService受欢迎的一个原因:它为您处理所有线程和stopSelf()内容。