Repeating Periodic Tasks in Android

Overview

Repeating periodic tasks within an application is a common requirement. This functionality can be used for polling new data from the network, running manual animations, or simply updating the UI. There are at least four ways to run periodic tasks:

  1. Handler - Execute a Runnable task on the UIThread after an optional delay
  2. ScheduledThreadPoolExecutor - Execute periodic tasks with a background thread pool
  3. AlarmManager - Execute any periodic task in the background as a service
  4. TimerTask - Doesn't run in UIThread and is not reliable. Consensus is to never use TimerTask

Recommended methods are outlined below.

Handler

We can use a Handler to run code on a given thread after a delay or repeat tasks periodically on a thread. This is done by constructing a Handler and then "posting" Runnable code to the event message queue on the thread to be processed.

handler

Executing Code After Delay

Using a Handler, we can execute arbitrary code a single time after a specified delay:

// We need to use this Handler package
import android.os.Handler;

// Create the Handler object (on the main thread by default)
Handler handler = new Handler();
// Define the code block to be executed
private Runnable runnableCode = new Runnable() {
    @Override
    public void run() {
      // Do something here on the main thread
      Log.d("Handlers", "Called on main thread");
    }
};
// Run the above code block on the main thread after 2 seconds
handler.postDelayed(runnableCode, 2000);
Execute Recurring Code with Specified Interval

Using a similar technique, we can also use a handler to execute a periodic runnable task as demonstrated below:

// We need to use this Handler package
import android.os.Handler;

// Create the Handler object (on the main thread by default)
Handler handler = new Handler();
// Define the code block to be executed
private Runnable runnableCode = new Runnable() {
    @Override
    public void run() {
      // Do something here on the main thread
      Log.d("Handlers", "Called on main thread");
      // Repeat this the same runnable code block again another 2 seconds
      // 'this' is referencing the Runnable object
      handler.postDelayed(this, 2000);
    }
};
// Start the initial runnable task by posting through the handler
handler.post(runnableCode);

We can remove the scheduled execution of a runnable with:

// Removes pending code execution
handler.removeCallbacks(runnableCode);

Note that with a Handler, the Runnable executes in UIThread by default so you can safely update the user interface within the runnable code block. See this handler post and this other handler post for reference.

Refer to our threads and handlers guide for a more advanced breakdown.

ScheduledThreadPoolExecutor

pool of threads which can schedule commands to execute periodically in the background. Useful when multiple worker threads are needed but generally not needed. See this guide on how they work or this stackoverflow post.

AlarmManager

This should be used if the periodic tasks need to run in the background even when the app is not in the foreground. This leverages the alarm service on the phone to cause periodic executions of a service which will run continuously until stopped. See the AlarmManager section of the services guide for details.

References


原文地址: https://guides.codepath.com/android/Repeating-Periodic-Tasks

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值