2011-07-03 15 views
1

実行中のサービスがあります。しかし、タスクマネージャーがサービスを開始するActivivtyを殺すと、そのサービスは殺されます。Android開発:サービスが終了する

タスクマネージャがサービスではなくアクティビティを強制終了すると、サービスが停止するのはなぜですか?

答えて

0

CommonsWareの補足:あなたのサービスが存在する唯一の理由は、それがアクティビティにバインドされているということだけでした。そのアクティビティが終了すると、サービスが存在する理由はなくなりました。

(私はここにバインドされたサービスで考える!http://developer.android.com/guide/topics/fundamentals/services.html

更新

あなたのコメントに基づいて、私はあなたが「開始」サービスを利用していることがわかります。そのような場合は、Activityクラス内の内部クラスとしてではなく、別のクラスにサービスを実装することをお勧めします。これはあなたの問題の原因になっている可能性があります。

+0

というアプリケーションがあります。これは、アクティビティクラスの拡張に追加しました。startService(this.myService) – carefacerz

+0

いいえ、私は2つのクラスを持っています。 – carefacerz

+0

私は彼がこれを意味すると思う、私は同じことを経験している:彼はアクティビティを持って、startService()を使用して彼のサービスを開始する。ある時点で、アクティビティが強制終了されます(強制停止パッケージcom.mypackage)。次のlogcatメッセージは私のサービスがクラッシュしたことを示し、ActivityManagerは再起動をスケジュールしています。これについての洞察? – nhaarman

1

Androidには、少なくともその名前で「タスクマネージャ」はありません。

Android 2.1以上を実行している場合、自分自身を「タスクマネージャ」または「タスクキラー」と表現するサードパーティのアプリケーションは、プロセス全体を終了することができます。

「タスクマネージャ」の役割が多少低下しているのに、Android 2.2以降を使用している場合、OSの設定アプリケーションでは、アプリケーションや個々のサービスを強制停止できます。

IOW、あなたが見ているのは完全に正常であり、考慮する必要があるものです。ユーザーは、そこにあるサービスの価値を認識しない限り、長時間実行されているサービスは好きではありません。たとえば、音楽を再生しているサービスを殺すユーザーは、もうそれをやめないようにすばやく学びます。しかし、ユーザがあなたのサービスがどのような価値を追加しているのか分からず、あなたのサービスがたくさん動いているなら、それがユーザによって停止されることを期待してください。

結果として、知識の豊富な開発者は、長時間実行されるサービスを避けるためにアプリケーションを設計します。たとえば、サービスを常時稼働させるのではなく、15分ごとに何か(新しいメールなど)をインターネットでチェックしている場合は、AlarmManagerを使用して15分ごとにサービスを開始し、そのサービスを一度停止しますインターネットチェックが完了しました。これにより、同じ機能が得られますが、ほとんどの場合、メモリが不足しています。

+1

私はタスクキラーを意味します。 HTC Sense 2.3.3に組み込まれているタスクマネージャー – carefacerz

関連する問題