0

ユーザーが複数のアラームを設定できるアラーム アプリケーションがあります。(AlarmManager と BroadcastReceiver を使用して) アラームが鳴ると、アプリは単純に通知を表示します。

アプリが長時間フォアグラウンドにない可能性があるため、UI スレッドが実行されません。

私の質問は、アラームが鳴り、通知が表示されると、アプリのコードの一部が実行されることです (BroadcastReceiver と通知の作成)。次は何が起こる?アプリのプロセスはすぐに強制終了されますか? Androidがそれを殺すことを決定するまで、アイドル状態のままですか?

(これはすべて、通知 ID の永続化に関する別の質問 (http://stackoverflow.com/questions/11376294/do-i-need-to-persist-my-notification-ids) に関連しています。私のアプリがフォアグラウンドと 2 つのアラームが 1 分間隔で鳴ります。通知 ID を静的な ArrayList に保存します。2 番目の通知の作成でデバッガを使用すると、通知クリエータ クラスがまだ最初の通知の ID を ArrayList に保持しているように見えます。これは、プロセスが最初のアラームと 2 番目のアラームが鳴るまでの間に存在します。)

4

2 に答える 2

1

Android には、そのためのドキュメントがいくつかあります。プロセスのライフサイクル すべては、システムのメモリ量とプロセスの種類によって異なります。BroadcastReceivers の場合、デバイスのメモリが不足しているときに最初に強制終了されるように見えますが、そうでない場合は存続します。

于 2012-07-07T16:02:12.340 に答える
1

次は何が起こる?

あなたのアバターを考えると、あなたはお茶を飲んでいます。または、時間帯や飲み物の好みに応じて、1 パイント。

:-)

アプリのプロセスはすぐに強制終了されますか?

おそらくそうではありません。

Androidがそれを殺すことを決定するまで、アイドル状態のままですか?

はい。Android は、他のプロセスを起動するために RAM が必要になると、プロセスを終了します。プロセスに実行中のコンポーネントがない場合、終了するプロセスのリストの比較的上位になります。したがって、あなたのプロセスはそれほど長くは続かないかもしれませんが、あなたのBroadcastReceiver終了と終了されるプロセスの間に直接の因果関係はありません.

アプリがフォアグラウンドで実行されておらず、2 つのアラームが 1 分間隔で鳴っている場合、通知 ID を静的な ArrayList に保存します。2 番目の通知の作成でデバッガーを使用すると、私の通知クリエーター クラスは最初の通知の ID を ArrayList に保持しているようです。これは、最初のアラームと 2 番目のアラームが鳴るまでの間にプロセスが存続していることを示しています。

アラームの間隔が 1 分しかない場合、プロセスが継続するのは当然ですが、それが保証されるわけではありません。もちろん、毎分継続的にアラームを実行しても、人気が出る可能性は低いため、ユーザーがこの動作をある程度制御できるようにしてください (たとえば、アプリを完全に停止したり、ポーリング期間を変更したりできます)。

于 2012-07-07T16:04:30.853 に答える