私はブロードキャストレシーバーを使用して、onclick メソッドを介して設定されたインテントサービスをリッスンしています。これはすべて問題ありませんが、画面が回転している場合は、onPause (onDestory でもこれを試しました) メソッドで登録解除を行い、onResume でブロードキャストレシーバーを再登録する必要がありました。
私の問題は、ブロードキャストレシーバーが登録解除/登録されている間、インテントサービスがブロードキャストを送信して完了したことを伝えることができることです。これは、ブロードキャストレシーバーがまだそこに座って、すでに起こったことを待っていることを意味します。
ブロードキャストの前にインテントサービスでスリープを使用しようとしましたが、これは完全な証拠ではなく、デバイスが再び回転した場合にタイミングの問題があります。
次のように、onClick からインテント サービスとブロードキャストレシーバーを開始して登録します。
Intent intentMyIntentService = new Intent(myclass.this,myservice.class);
startService(intentMyIntentService);
mybroadcastreciver = new br();
IntentFilter intentFilter = new IntentFilter(myservice.ACTION_ServiceE);
intentFilter.addCategory(Intent.CATEGORY_DEFAULT);
registerReceiver(mybroadcastreciver, intentFilter);
br メソッドは、onReceive メソッドとしてのブロードキャストレシーバーであり、onSaveInstanceState メソッドで構成の変更を処理し、onCreate をチェックインして Bundle != null かどうかを確認し、intentservice が完了しているかどうかに応じて設定されるブール値を取得します。受信者に送信するブロードキャストを使用します。
画面が回転していない場合、これはすべて機能します。ただし、画面の回転を処理する他の方法があることは知っていますが、API 8 から 17 まで動作するアプリを作成しています。
ありがとう
ティム