0

アプリケーションにSMSブロードキャストレシーバーがあり、レシーバーをアクティブにするかどうかを静的なブール値で設定しています。

public class SmsListener extends BroadcastReceiver {

        public static boolean activated = false;


        @Override
        public void onReceive(Context context, Intent intent)
             if (activated){ //do something
              } 
         ...
      }
}

次に、SMSレシーバーをアクティブにするかどうかを決定するウィジェットがあります(この静的値を介して)。すべて正常に動作しますが、電話のメモリが少なくなると、SMS リスナーがその状態を失い、アプリケーションが期待どおりに動作しないことに気付きました。Androidのライフサイクルに関連していると思います。バックグラウンドでサービスがなく、システムがプロセスを強制終了します。私が使用したアプローチは避けるべきですか?Androidプロセスの強制終了を避けるためだけに、常にサービスを開始する必要がありますか?

ありがとう

トビア・ロスキアヴォ

4

1 に答える 1

0

私が見つけた唯一の信頼できるグローバルな方法は、それらをサービスに入れることです。Android の方法は、onSaveInstanceState を使用してから、その状態で呼び出される場合と呼び出されない場合があるすべてのさまざまなメソッドで状態を回復することです。それでも完全に信頼できるわけではないため、onPause のときに設定に状態を書き込み、onResume でそれらを読み取ることもできます。

マニフェストによっては、メモリ不足だけでなく、キーボードを開いたり、電話を回転させたりするなど、アクティビティが殺される可能性があることにも注意してください。

于 2010-04-20T20:24:00.303 に答える