簡體   English   中英

Android - 每 15 分鍾運行一次后台任務,即使應用程序未運行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM