1

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

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

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

4

1 回答 1

3

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

假设这是您自己派生的线程,Android 不会注意到该线程,该线程将继续运行、泄漏,直到 Android 终止您的进程。

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

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

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

于 2012-10-17T22:31:22.987 回答