【问题标题】:Battery saving strategy for a long running IPC service长期运行 IPC 服务的省电策略
【发布时间】: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


【解决方案1】:

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

如果您查看此链接:http://developer.android.com/reference/android/app/Activity.html,您可以从图中看到 onDestroy 仅在系统即将从内存中清除您的应用程序时调用,并且根据内存限制,它可能永远不会被调用.

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多