java - android中的计时器类还是处理程序计时器?
问题描述
Android 计时器类和使用 Handler 创建一个有什么区别?
我尝试了两种方法,我知道它们可以做不同的事情,但我不知道为什么,例如使用 android 计时器类我无法更新视图,我认为这是一个巨大的限制,但使用处理程序时代码感觉很乱。
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
//actions
}
}, 2000);
}
那么,每隔几秒做一个动作最好是什么?
编辑:这不是重复的,因为我询问有关使用计时器更新视图的问题。
解决方案
android.os.Handler
是 Android 框架的一部分,如果您在 UI 或主线程中创建了 Handler,则作业将在 UI 或主线程上执行。请注意,在 Android 中,您只能从 UI 线程更新视图。
java.util.Timer
另一方面将在另一个线程上执行,因此它无法更新视图。
所以这里推荐使用Handler。如果你真的想使用 Timer,你必须使用runOnUiThread
:
new Timer().schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
//this will run on UI thread so you can update views here
}
});
}
}, 2000, 2000);
推荐阅读
- flutter - 切换到其他屏幕时颤动黑屏
- java - gradle --project-cache-dir 如何在多项目和复合构建项目中工作?
- javascript - 将js文件打包成一个文件
- node.js - expressjs 在 mongoDB 上保存/更新数据而不渲染任何内容
- tailwind-css - 如何为tailwind-css添加新颜色并保留原始颜色?
- python - 填充缺少日期的数据集(以小时为单位)
- kubernetes - 如何使用 Istio 在 Kubernetes 上运行 Mosquitto?
- azure - Azure IoT 中心(事件中心)触发器:找不到有效的帐户信息组合
- android - 在我的项目上启用混淆后在 BroadcastReceiver 中获取 InvalidClassException
- android - 成功构建后无法初始化设计编辑器