android - 这些在 UI 线程上运行代码的方法有什么区别?
问题描述
关于如何在 UI 线程上运行代码,网上发布了不同的方法。它们都完成相同的任务,但是,我真的很想知道这些方法之间的区别。
方法一:
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
// Code here will run in UI thread
}
});
方法二:
new Handler().post(new Runnable() {
@Override
public void run() {
// Code here will run in UI thread
}
});
方法三:
runOnUiThread(new Runnable() {
@Override
public void run() {
// Code here will run in UI thread
}
});
解决方案
方法 1 将始终有效。
方法 2 仅在您已经在 UI 线程上时才有效 - 没有 Looper 参数的新处理程序会为当前线程创建一个处理程序(如果当前线程上没有 Looper,则会失败)。
方法三需要在Activity中完成或者在Activity对象上调用,因为runOnUiThread是Activity的一个函数。但在引擎盖下,它会做与 1 相同的事情(尽管可能会保留一个 Handler 以提高效率,而不是总是新的)。
推荐阅读
- jquery - HttpResponse 数据不可用于 jquery 代码
- ios - 将颜色列表从 Objective-C 传递到 React Native
- python - 通过 VM 中的 python tensorflow 脚本在云上处理大型数据集(图像)的最佳实践
- python - 字符串格式:在最终字符串中获取 u''
- javascript - 如何从字符串中提取数字并将它们存储到变量中?
- reactjs - 用打字稿反应模态
- python - 我们可以编辑 endpoints.py 并在气流中添加新功能吗?
- int - 位数据类型字段值 1 在表格模型中自动转换为 -1
- hyperledger - 有没有办法使用超级账本作曲家来维护对等方之间的私有数据?
- html - 是否有一个 CSS 布局可以反转桌面视图中行堆栈中列的排列?(见图)