43

アプリケーションが閉じている場合でも、定期的に(つまり、Webサイトのニュースページを取得する)タスクを実行したい(週に1回/日に1回)。出来ますか?

4

3 に答える 3

49

はい、そうです。繰り返し発生する「アラーム」を設定するには、 AlarmManagerを確認する必要があります。これは、サービスとは異なり、バックグラウンドで常に実行されるわけではないため、デバイスのバッテリー寿命に適しています。アラームは、カスタムコードを実行するブロードキャストレシーバーをトリガーします。

最後に、アラームのタイミングには、実際の値を設定することもできますが、日次、半日、その他多数の列挙値があります。

良い例は、次のSO投稿にあります。

アラームマネージャの例

アップデート

新しい機能がAndroidに追加されました。これを読んでいる場合は、GcmNetworkManagerを調べることをお勧めします。これにより、バッテリーの寿命が最適化され、ロリポップ前に機能します。Lollipop以降では、 JobSchedulerを使用できます。これらのクラスをAlarmManagerよりも使用することをお勧めします。

于 2011-12-23T11:34:54.843 に答える
13

最適なのはGcmNetworkManagerだと思います。基本的に、AlarmManagerから必要なものすべてに加えて永続性があるため、再起動後にジョブの実行を続行できます。

例:

PeriodicTask task = new PeriodicTask.Builder()
        .setService(MyTaskService.class)
        .setTag(TASK_TAG_PERIODIC)
        .setPeriod(5L)
        .build();

mGcmNetworkManager.schedule(task);
于 2016-02-29T18:26:46.810 に答える
9

別の方法として、今週を比較しています。

Calendar cal = Calendar.getInstance();
int currentWeekOfYear = cal.get(Calendar.WEEK_OF_YEAR);

SharedPreferences sharedPreferences= this.getSharedPreferences("appInfo", 0);
int weekOfYear = sharedPreferences.getInt("weekOfYear", 0);

if(weekOfYear != currentWeekOfYear){
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putInt("weekOfYear", currentWeekOfYear);
    editor.commit();
    // Your once a week code here
}

私はこれがアラームソリューションよりも優れていると主張しているわけではありません。別のアプローチを示しているだけです。

于 2015-09-17T15:01:01.953 に答える