0

反対票を少し待って読んでください。

私の質問の後、 アプリのいくつかのアクティビティを制御する制御インスタンスを作成する方法はありますか?

アプリケーションが閉じられたときに検出を読み取った後

私は疑問に思っています...私は自分のアプリといくつかのサービスで多くのアクティビティを持っており、デバイスが持っているすべてのハードウェアにアクセスしています。アプリが実行されている限り、これらのものへのアクセスは理にかなっています。活動は変化する可能性がありますが、それらへのアクセスの必要性は、それらのすべてに存在します (少し誇張されています)。

私のニーズに適していると思われる 2 つの方法を知っています。

1)アプリケーションを拡張し、どこでも必要なものにアクセスまたは計算するいくつかのオブジェクトをインスタンス化します

2)アクティビティのサブクラスで同じことを行います

どちらの場合も、ブロードキャストレシーバーの登録を解除してサービスを停止したいと思います。サービスはバインドされていません (理由により)。では、起こりうるすべてのケースで物事を閉じて登録解除する適切な方法は何ですか?

  • onDestroy が呼び出されていない可能性があります

  • プロセスがシステムによって閉じられている/強制終了されていることを通知されません

では、すべてのアクティビティに対して常にそこにあり、アプリが閉じられるたびに停止してクリーンアップするものを作成するにはどうすればよいですか?!

4

1 に答える 1

1

Android で「常にそこにある」ものを作成することは決してできません。それは単にアーキテクチャの一部ではありません。startforeground サービスを使用しても、デバイスのメモリが不足している場合やスリープしている場合は、サービスが破棄される可能性があります (指摘したように、ondestroy の呼び出しは保証されません)。

準感覚で何かを「永遠に生き続ける」ために私が見つけた最も信頼できる方法は、RTC_WAKEUP で繰り返しアラームスケジュールを設定し、WAKE LOCK を使用することです。

しかし、それらの問題は、明日のようにバッテリーを食い尽くすことです! 画面がオンになっているときにすべてのことを心配している場合は、ほとんどのシナリオで、ウェイクロックなしの不正確な繰り返し RTC アラームがうまく機能するようです。

編集:私はあなたの質問に間接的に答えましたが、上記に加えて、リソースを使い終わったら、null を宣言するか、登録を解除します。登録されたものが長く存続しているサービスがあり、Android が onDestroy を呼び出さずにサービスを終了することを決定した場合、それについてできることはあまりありません。先に進んでください (そして、状態を永続ストレージに保存して、できるようにしますそれらが最後に中断された状態で、次の初期化でそれらを取得します。)

于 2012-12-04T17:20:56.723 に答える