14

サービスとして実行され、メッセージを待機するアプリに取り組んでいます。ログを確認したところ、Android が多くのプロセスを頻繁に強制終了して再起動していることがわかりました。これは私のアプリだけでなく、他の多くのサービスでも同じです。

この理由はわかりませんが、デバイスには十分なメモリがあります。Android 4.0.4 を実行している Sony Xperia S でテストします。これは正常ですか、それともバグですか?

ここに、私が何を意味するかを示すログの一部を示します。

02-04 15:02:38.791 320 332 I ActivityManager:プロセス com.android.email (pid 32763) が停止しました。 02-04 15:02:38.791 320 332 W ActivityManager: クラッシュしたサービス com.android.email/.service.MailService の再起動を 5000 ミリ秒でスケジュール

....そして13分後:

02-04 15:15:32.601 320 694 I ActivityManager:プロセス com.android.email (pid 1453) が停止しました。

4

2 に答える 2

11

それは正常です、OSはこれを定期的に行います。

なんで?非アクティブまたはバックグラウンドにあるすべてのアプリまたはサービスは、Android メモリ マネージャーが無駄にメモリを消費していると判断するか、別のアクティブなアプリ/サービスがそれを必要とするまで、メモリに残ります。たとえば、homeメール アプリでボタンを押したときなどです。アプリを再度開いたときの正確な場所に戻ります。このアプリは単に一時停止され、メモリ内である種の休止モードになっているためです。Android がそのメモリを他に割り当てる必要がない限り、そのメモリはそこに保持されます。

OS がサービスを強制終了しないようにする方法は、永続的なサービスを作成することです。

システム アプリを開発している場合にのみ、サービスを永続化できます。これらのサービスは基本的に強制終了できず、「adb shell dumpsys activity」コマンドの出力で「PERS」とラベル付けされます。

http://www.androidguys.com/2009/09/09/diamonds-are-forever-services-are-not/

しかし:

と を使用AlarmManagerしてくださいIntentService。これにより、サービスが意味のある作業を行っている場合を除き、サービスがメモリ内に存在する必要がなくなります。これはまた、Android がメモリ内にいる間にサービスを強制終了する可能性が低く、ユーザーがメモリを浪費していると考えてサービスを強制終了する可能性が低いことも意味します。

于 2013-02-07T09:52:52.077 に答える