1

BroadcastReceiver を使用してアプリで SMS メッセージを受信し、メッセージの内容に基づいてデータベースを編集しています。アプリは開いているときは正常に動作しますが、長時間オンのままにして自動的に閉じると、メッセージを受信するとアプリが強制的に閉じられます (BroadcastReciever はまだ動作していると思いますが、アプリの残りの部分は閉まっている)。テキストメッセージを受信したときにアプリを閉じたり再開したりしないようにする方法はありますか?

ありがとう

4

1 に答える 1

1

レシーバーを永続的にしたい場合は、アプリケーションServiceの標準の代わりに を使用することを検討する必要がありActivityます。標準アクティビティに存在する は、実行が返されるとすぐに処理が通常のプロセス優先度に戻り、必要に応じてシステムによって終了できる場合にのみBroadcastReceiver、フォアグラウンド サービスと見なされます。onReceiveActivity

から:BroadcastReceiver

プロセスのライフサイクル

現在 BroadcastReceiver を実行している (つまり、その onReceive(Context, Intent) メソッドで現在コードを実行している) プロセスは、フォアグラウンド プロセスと見なされ、極度のメモリ不足の場合を除き、システムによって実行され続けます。

onReceive() から戻ると、BroadcastReceiver はアクティブではなくなり、そのホスティング プロセスは、そこで実行されている他のアプリケーション コンポーネントと同じくらい重要になります。これは特に重要です。そのプロセスが BroadcastReceiver のみをホストしていた場合 (ユーザーが一度も対話したことがない、または最近対話していないアプリケーションの一般的なケース)、システムは onReceive() から戻ると、そのプロセスが空であると見なし、積極的に強制終了するためです。他のより重要なプロセスにリソースを使用できるようにします。

これは、実行時間の長い操作の場合、Service を BroadcastReceiver と組み合わせて使用​​して、操作中ずっと含まれているプロセスをアクティブに保つことが多いことを意味します。

サービスの作成の詳細については、次を参照してください。

開発者ガイド
サービスの作成方法の詳細については、サービス開発者ガイドを参照してください。

于 2012-04-11T23:01:14.587 に答える