アプリケーションが閉じている場合でも、定期的に(つまり、Webサイトのニュースページを取得する)タスクを実行したい(週に1回/日に1回)。出来ますか?
3 に答える
はい、そうです。繰り返し発生する「アラーム」を設定するには、 AlarmManagerを確認する必要があります。これは、サービスとは異なり、バックグラウンドで常に実行されるわけではないため、デバイスのバッテリー寿命に適しています。アラームは、カスタムコードを実行するブロードキャストレシーバーをトリガーします。
最後に、アラームのタイミングには、実際の値を設定することもできますが、日次、半日、その他多数の列挙値があります。
良い例は、次のSO投稿にあります。
アップデート
新しい機能がAndroidに追加されました。これを読んでいる場合は、GcmNetworkManagerを調べることをお勧めします。これにより、バッテリーの寿命が最適化され、ロリポップ前に機能します。Lollipop以降では、 JobSchedulerを使用できます。これらのクラスをAlarmManagerよりも使用することをお勧めします。
最適なのはGcmNetworkManagerだと思います。基本的に、AlarmManagerから必要なものすべてに加えて永続性があるため、再起動後にジョブの実行を続行できます。
例:
PeriodicTask task = new PeriodicTask.Builder()
.setService(MyTaskService.class)
.setTag(TASK_TAG_PERIODIC)
.setPeriod(5L)
.build();
mGcmNetworkManager.schedule(task);
別の方法として、今週を比較しています。
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
}
私はこれがアラームソリューションよりも優れていると主張しているわけではありません。別のアプローチを示しているだけです。