2

私は毎分ネットワークを監視するアプリケーションを開発しています。私はこれにBroadcastReceiverを使用しています。

1分ごとにBroadcastReceiverを実行したい。

どうすればいいですか?BroadcastReceiverでThread.sleep()を使用できますか?

AndroidでBroadcastReceiverを継続して実行しても大丈夫ですか?

4

6 に答える 6

9

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);
于 2013-03-25T13:14:30.510 に答える
2

あなたは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;
    }
于 2014-07-04T08:57:58.293 に答える
1

いいえ。Androidやその他のモバイルOSでバッテリーを消耗するようなものを継続的に実行することは、あなたがそれを助けることができれば絶対に受け入れられません。

あなたがすべきことは、AlarmManagerクラスを使用し、1分ごとにインテントを起動することです。これにより、サービスがアクティブ化され、必要なコードを実行できます。

例については、この回答を参照してください。

詳細については、このスレッドを参照してください: Android:AlarmManagerの使用方法

于 2013-03-25T13:15:09.850 に答える
1

特にBroadcastReceiverが必要な理由はありますか?もしそうなら、答えは、非常に簡単に言えば、あるコンポーネントに、受信したインテントを毎分ブロードキャストさせることです。

アラームマネージャーを見てみるべきだと思います。アプリでPendingIntentを定期的に起動するようにプログラムできます。私はあなたが望むものだと思います。

于 2013-03-25T13:15:25.070 に答える
0

BroadcastReceiverを使用する代わりに、サービスコンポーネントを使用することをお勧めします。コードの実行に10秒以上かかる可能性がありますが、BroadcastReceiverの場合、コードの実行には10秒の制限があります。

さらに、サービスは、音楽のダウンロード、アップロード、再生などのバックグラウンドプロセスに最適です。

したがって、BroadcastReceiverではなくexecuteサービスを使用することをお勧めします。

于 2013-03-25T13:14:16.133 に答える
0

BroadcastReceiverの代わりに。特定の時間間隔でサービスを開始するためにAlarmManagerを使用する必要があります。

ここからサンプルソースコードを入手できます

お役に立てば幸いです。

于 2013-03-25T13:17:33.943 に答える