[英]Android - Running a background task every 15 minutes, even when application is not running
我需要構建一個每 10/15 分鍾運行一次的后台任務(並不重要,兩者都很好),即使應用程序沒有運行。
我怎樣才能做到這一點? 我似乎無法解決這個問題。
我讀到我可以使用某種 runnable() 功能或使用后台服務或 AlarmManager。 我在考慮后台服務,因為它也必須在應用程序本身未運行時完成。
有什么更好的方法可以做到這一點,我該怎么做?
您已經確定了執行一段代碼的時間(間隔),最好使用AlarmManager,因為它更節能。 如果您的應用程序需要偵聽某種事件,那么 Service 就是您所需要的。
public static void registerAlarm(Context context) {
Intent i = new Intent(context, YOURBROADCASTRECIEVER.class);
PendingIntent sender = PendingIntent.getBroadcast(context,REQUEST_CODE, i, 0);
// We want the alarm to go off 3 seconds from now.
long firstTime = SystemClock.elapsedRealtime();
firstTime += 3 * 1000;//start 3 seconds after first register.
// Schedule the alarm!
AlarmManager am = (AlarmManager) context
.getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime,
600000, sender);//10min interval
}
警報管理器(系統服務)與具有內部警報實現(單獨進程)的遠程服務?
鬧鍾管理器是你的選擇,因為它已經有你需要的東西,你只需要設置鬧鍾間隔
您還可以通過 SyncAdapter 實現此目的這是一個示例,供您查看並獲得啟發
工作經理實際上是定期重復的最佳選擇,他們的默認值是 15 分鍾,這完全符合您的需要。 下面是一個例子:
final PeriodicWorkRequest periodicWorkRequest
= new PeriodicWorkRequest.Builder(ApiWorker.class, 15, TimeUnit.MINUTES)
.build();
WorkManager.getInstance().enqueue(periodicWorkRequest);
其中 ApiWorker 只是以下類:
public class ApiWorker extends Worker implements iOnApiRequestSuccessful {
public ApiWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@NonNull
@Override
public Result doWork() {
return Result.success();
}
}
並在成功返回之前在 doWork() 函數中填寫您想要完成的任何工作。
Return.success() 使它再次插入到隊列中,因此它將每 15 分鍾重復一次。
最好的方法是在 Google I/O 2018 - WorkManager 上介紹的。
您可以在此處找到文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.