长期运行的IPC服务的省电策略

时间:2012-12-27 10:12:23

标签: android

我读了这篇很棒的博客文章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服务的正确方法是什么?对于上述示例,什么是良好的电池节省策略?

1 个答案:

答案 0 :(得分:1)

它仍在运行的原因是系统从未调用onDestroy。

如果你查看这个链接:http://developer.android.com/reference/android/app/Activity.html你可以从图中看到只在系统要从内存中清除你的应用程序时才调用onDestroy,并且根据内存限制,它可能永远不会被调用一点都不。

唯一可以保证被调用的回调是onPause(),这是您应该依赖的停止服务的回调。