令牌取消延时任务:
当然,我可以给你一个更详细的例子来说明如何使用令牌(token)来取消任务。在这个例子中,我们将创建一个简单的计时器,它在延迟后执行一些任务,并且我们可以使用令牌来取消这个计时器。
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
public class ExampleHandler {
private Handler handler = new Handler(Looper.getMainLooper());
private Object token;
public ExampleHandler() {
// 创建一个唯一的令牌
token = new Object();
}
public void startTimer(final int delayMillis) {
Runnable runnable = new Runnable() {
@Override
public void run() {
Log.d("Handler", "Timer finished!");
// 执行一些任务
}
};
// 延迟delayMillis后执行runnable,并附带令牌
handler.postDelayed(runnable, delayMillis, token);
}
public void cancelTimer() {
// 取消所有附带令牌的任务
handler.removeCallbacksAndMessages(token);
}
}
在这个例子中,我们创建了一个ExampleHandler
类,它有一个Handler
实例和一个唯一的令牌token
。我们提供了一个startTimer
方法来开始一个计时器,它会在延迟delayMillis
后执行一个Runnable
任务。我们还提供了一个cancelTimer
方法来取消所有附带这个令牌的任务。
要使用这个类,你可以这样做:
public class MainActivity extends AppCompatActivity {
private ExampleHandler exampleHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
exampleHandler = new ExampleHandler();
// 开始一个延迟5秒的计时器
exampleHandler.startTimer(5000);
// 在3秒后取消计时器
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
exampleHandler.cancelTimer();
Log.d("Handler", "Timer canceled!");
}
}, 3000);
}
}
在这个 activity 的 onCreate
方法中,我们创建了一个ExampleHandler
实例,并使用它来开始一个延迟5秒的计时器。然后,我们在3秒后使用另一个Handler
来取消这个计时器。由于我们传递了token
到postDelayed
方法,当我们在3秒后调用cancelTimer
时,只有附带这个令牌的任务会被取消。
这样,我们就可以在任务开始执行之前取消它,或者在它执行完毕后取消后续的任务。使用令牌来取消任务是一个很好的做法,因为它可以防止不小心取消错误的任务,并且可以让你在取消任务时提供更多的上下文信息。