【发布时间】:2012-12-27 18:35:40
【问题描述】:
我读了这篇很棒的博客文章Android Architecture Tutorial: Developing an App with a Background Service (using IPC)
作者展示了在一个单独的进程中在固定时间间隔内运行的推文检索服务。
服务将无限运行。我意识到停止该过程,去管理应用程序并明确停止服务是唯一的方法。
请注意,这不是一种对电池非常友好的方式。连作者都自称。
是的,Android 后台服务也有阴暗面 – 也是 许多服务在后台做太多事情会变慢 手机和吸电池。然而这并不是我想要的 在这篇文章中提出,所以也许我们会回到资源 管理礼仪在另一篇文章中。
但是,作者不再更新他的博客。
我尝试通过TweetViewActivity停止服务。
@Override
protected void onDestroy() {
super.onDestroy();
try {
api.removeListener(collectorListener);
unbindService(serviceConnection);
} catch (Throwable t) {
// catch any issues, typical for destroy routines
// even if we failed to destroy something, we need to continue destroying
Log.w(TAG, "Failed to unbind from the service", t);
}
// New code added by Cheok. Not working. Not sure why.
this.stopService(intent);
Log.i(TAG, "Activity destroyed");
}
但这不起作用。我可以看到服务仍在运行。我可以知道,一旦我退出Activity,停止IPC服务的正确方法是什么?对于上面的例子,什么是好的节电策略?
【问题讨论】:
-
也许我应该将 onDestroy 中的所有代码移动到 onStop,正如文章中所说,服务创建代码放在 onCreate 上。
-
好吧,不能保证什么时候你的 onDestroy/onStop 会被调用。系统决策在这里起着重要作用。我相信您的服务仍在运行,因为系统还没有真正决定调用您的 onDestroy/onStop 方法。您可以尝试 onPause() 方法。它会起作用的。
标签: android