android开发教程之间隔执行程序(android计时器)


在Android开发中,如果你想要实现一个间隔执行程序的功能,通常可以使用`Handler`配合`Runnable`,或者使用`ScheduledExecutorService`,再或者利用Android的`AlarmManager`(虽然`AlarmManager`主要用于在特定时间或周期性地唤醒应用,并不完全等同于传统意义上的计时器)。但对于简单的间隔执行任务,`Handler`和`Runnable`是一个轻量级的解决方案。

这里我将给出一个使用`Handler`和`Runnable`实现间隔执行任务的简单示例:


import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;

public class IntervalExecutionActivity extends AppCompatActivity {

    private TextView textView;
    private Handler handler = new Handler();
    private Runnable runnable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_interval_execution);

        textView = findViewById(R.id.textView);

        // 初始化Runnable
        runnable = new Runnable() {
            @Override
            public void run() {
                // 这里放置你想要周期性执行的任务
                textView.setText("任务执行中,当前时间:" + System.currentTimeMillis());

                // 再次发送消息到Handler,实现循环
                handler.postDelayed(this, 1000); // 间隔1秒
            }
        };

        // 启动Runnable
        handler.postDelayed(runnable, 1000); // 延迟1秒后开始执行
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        // 清除所有回调和消息,防止内存泄漏
        handler.removeCallbacks(runnable);
    }
}

在这个示例中,`Handler`用于安排Runnable的执行,而Runnable中则包含了你想要周期性执行的任务。通过`handler.postDelayed(runnable, delayMillis)`,你可以设定Runnable在多少毫秒后执行,并在Runnable的`run`方法中再次调用`handler.postDelayed(this, delayMillis)`来实现间隔执行。

注意,在Activity的`onDestroy`方法中,我们使用`handler.removeCallbacks(runnable)`来移除所有之前通过`postDelayed`或`postAtTime`方法发送的消息和Runnable,以避免内存泄漏。

请注意,由于Android的UI操作需要在主线程中执行,而`Handler`默认与创建它的线程(在这个例子中是主线程)相关联,因此上述代码适用于在UI线程中执行周期性任务。如果你需要在非UI线程中执行周期性任务,并更新UI,你可能需要使用`Handler`的另一种形式,即指定一个与Looper关联的线程。然而,在大多数情况下,对于简单的间隔执行任务,上述方法已经足够。