2017-07-12 7 views
1

私はデータを収集するサービスを持っており、サービスはこのデータを自分のサーバーに送信する必要があります。私は彼らがタスクをスケジュールするために利用可能なソリューションがたくさんあることを知っていますが、私のケースでは、バッテリー消費とリソースの利用に関して最も効率的なものは何でしょうか?私のサービスで効率的にタスクをスケジュールする方法は?

も、私のサービスが停止することができ、そして私のサービスが停止されたとき、それはもはや任意のデータを送信してはならないです(これは私の知る限り、私のサービスを再起動しますですので、そうalarmmanager継ぎ目が最善の方法はないように)

+0

ラジオであるだろうが、あなたJobSchedulerを見てください – tyczj

答えて

1

AlaramManager経由でスケジュールを設定するには、スケジュールされたタスクをキャンセルすることもできますので、問題はありません。

それはこの

AlarmManager alarm = (AlarmManager) getSystemService(ALARM_SERVICE); 
Intent intent = new Intent(getApplicationContext(), YourService.class); 
alarm.set(
    AlarmManager.RTC_WAKEUP, 
    System.currentTimeMillis() + DateUtils.HOUR_IN_MILLIS, 
    PendingIntent.getService(getApplicationContext(), 11, intent, PendingIntent.FLAG_UPDATE_CURRENT) 
); 

ようになり、あなたがそれへのアクセスを得ることが可能なPendingIntentための識別子であり、この

AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
Intent myIntent = new Intent(getApplicationContext(), YourService.class); 
PendingIntent pendingIntent = PendingIntent.getService(getApplicationContext(), 11, myIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
alarmManager.cancel(pendingIntent); 

11のように行うことができるキャンセルします。

+0

ありがとうmurat私は見てみる – loki

+0

これは私のサービスのonStartCommandを呼び出しますか? – loki

+0

@lokiはい、[サービス](https://developer.android.com/reference/android/app/Service.html#ServiceLifecycle)についてはこちらをご覧ください。 –

1

アラームマネージャだけでは不十分です。

WiFi接続または3G/4G無線を「アイドル/使用していない」から「データを送受信する」にシフトすると、ネットワーク接続がすでにアクティブになっているときにデータを送信する必要があります。デバイスがすでにデータを送受信している場合は、無線を有効にするための追加エネルギーコストはありません。

現在のネットワーク状態をアプリに通知するブロードキャスト受信機を登録できます。

詳細は、お使いの転送戦略は

  • alarmmanager

  • +0

    私はあなたに完全に同意しますが、これをどうやって行うのですか?任意のサンプル? – loki

    +0

    https://developer.android.com/training/efficient-downloads/efficient-network-access.html – k3b

    +0

    私はこの文書を読んでいますが、正確に何をすべきかは何も説明していません。私はすでに、この質問の目的を知っている)、私はそれを実装する方法です知っている必要があります:(どのようにalarmmanagerとネットワークを介して効率的にデータを送信する方法です。ネットワーク接続を待ちますが、これをすべて行うには – loki

    関連する問題