1

このすばらしいブログ記事を読みましたAndroidアーキテクチャチュートリアル:バックグラウンドサービスを使用したアプリの開発(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");
}

しかし、それはうまくいきません。サービスがまだ実行されているのがわかります。終了したら、IPCサービスを停止する正しい方法は何Activityですか?上記の例の良いバッテリー節約戦略は何ですか?

4

1 に答える 1

1

それがまだ実行されている理由は、システムがonDestroyを呼び出さなかったためです。

次のリンクを確認すると、http://developer.android.com/reference/android/app/Activity.htmlグラフから、システムがアプリケーションをメモリからクリアしようとしているときにのみonDestroyが呼び出されることがわかります。また、メモリの制約によっては、まったく呼び出されない場合があります。

呼び出されることが保証されている唯一のコールバックはonPause()、サービスを停止するために信頼する必要があるコールバックです。

于 2012-12-27T10:35:40.267 に答える