我读了这篇很棒的博客文章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服务的正确方法是什么?对于上述示例,什么是良好的电池节省策略?
答案 0 :(得分:1)
它仍在运行的原因是系统从未调用onDestroy。
如果你查看这个链接:http://developer.android.com/reference/android/app/Activity.html你可以从图中看到只在系统要从内存中清除你的应用程序时才调用onDestroy,并且根据内存限制,它可能永远不会被调用一点都不。
唯一可以保证被调用的回调是onPause()
,这是您应该依赖的停止服务的回调。