私は毎分ネットワークを監視するアプリケーションを開発しています。私はこれにBroadcastReceiverを使用しています。
1分ごとにBroadcastReceiverを実行したい。
どうすればいいですか?BroadcastReceiverでThread.sleep()を使用できますか?
AndroidでBroadcastReceiverを継続して実行しても大丈夫ですか?
私は毎分ネットワークを監視するアプリケーションを開発しています。私はこれにBroadcastReceiverを使用しています。
1分ごとにBroadcastReceiverを実行したい。
どうすればいいですか?BroadcastReceiverでThread.sleep()を使用できますか?
AndroidでBroadcastReceiverを継続して実行しても大丈夫ですか?
BroadcastReceieversは、一部のブロードキャスト(システムブロードキャストまたはユーザー定義ブロードキャスト)が受信された場合にのみ実行されるように設計されています。1分ごとにコードを実行する場合は、Alarm Managerを使用してサービスを作成し、1分ごとに実行するようにスケジュールできます。アラームマネージャーを使用して放送受信機からサービスを開始することができ、それは毎分実行されます。
放送受信機のonRecieve()メソッドで、以下のようなコードを使用します。
PendingIntent service = null;
Intent intentForService = new Intent(context.getApplicationContext(), YourService.class);
final AlarmManager alarmManager = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
final Calendar time = Calendar.getInstance();
time.set(Calendar.MINUTE, 0);
time.set(Calendar.SECOND, 0);
time.set(Calendar.MILLISECOND, 0);
if (service == null) {
service = PendingIntent.getService(context, 0,
intentForService, PendingIntent.FLAG_CANCEL_CURRENT);
}
alarmManager.setRepeating(AlarmManager.RTC, time.getTime()
.getTime(), 60000, service);
あなたはAlarmManagerなしでさえそれをすることができます
private void ping() {
try {
//Your code here
} catch (Exception e) {
e.printStackTrace();
}
scheduleNext();
}
private void scheduleNext() {
mHandler.postDelayed(new Runnable() {
public void run() { ping(); }
}, 60000);
}
public int onStartCommand(Intent intent, int x, int y) {
mHandler = new android.os.Handler();
ping();
return START_STICKY;
}
いいえ。Androidやその他のモバイルOSでバッテリーを消耗するようなものを継続的に実行することは、あなたがそれを助けることができれば絶対に受け入れられません。
あなたがすべきことは、AlarmManagerクラスを使用し、1分ごとにインテントを起動することです。これにより、サービスがアクティブ化され、必要なコードを実行できます。
例については、この回答を参照してください。
詳細については、このスレッドを参照してください: Android:AlarmManagerの使用方法
特にBroadcastReceiverが必要な理由はありますか?もしそうなら、答えは、非常に簡単に言えば、あるコンポーネントに、受信したインテントを毎分ブロードキャストさせることです。
アラームマネージャーを見てみるべきだと思います。アプリでPendingIntentを定期的に起動するようにプログラムできます。私はあなたが望むものだと思います。
BroadcastReceiverを使用する代わりに、サービスコンポーネントを使用することをお勧めします。コードの実行に10秒以上かかる可能性がありますが、BroadcastReceiverの場合、コードの実行には10秒の制限があります。
さらに、サービスは、音楽のダウンロード、アップロード、再生などのバックグラウンドプロセスに最適です。
したがって、BroadcastReceiverではなくexecuteサービスを使用することをお勧めします。
BroadcastReceiverの代わりに。特定の時間間隔でサービスを開始するためにAlarmManagerを使用する必要があります。
ここからサンプルソースコードを入手できます
お役に立てば幸いです。