xamarin.android - 关于 Activity.RunOnUIThread 的问题
问题描述
RunOnUIThread
感觉就像 Android 应用程序中的 UI 线程只是 UI 线程,是同一线程用于整个单个应用程序的所有活动吗?
如果是这样,我必须使用Activity.RunOnUIThread
吗?或者有没有其他选择?
解决方案
RunOnUiThread
在 UI 线程上运行代码(惊喜!)。如果当前线程是 UI 线程,则该代码将立即执行,否则(如果当前线程不是UI 线程),代码将在 UI 线程的事件队列中排队。
UI线程是执行的主线程,大部分代码都在它上面运行。(实际上任何改变 UI 的代码都应该在 UI 线程上运行)
我必须使用
Activity.RunOnUIThread
吗?
您必须RunOnUIThread
在非 UI 线程中使用(例如:后台线程)。
或者有没有其他选择?
如果您的意思是是否有任何其他方法可以强制代码在 UI 线程上运行,是的,我认为您可以使用Handler
它。(这可能会有所帮助:为什么在 runOnUiThread 做同样的事情时使用处理程序?)
奖励: 这是我与该问题相关的 2 个辅助方法:
public bool IsMainThread
=> Build.VERSION.SdkInt >= BuildVersionCodes.M
? Looper.MainLooper.IsCurrentThread
: Looper.MyLooper() == Looper.MainLooper;
public void RunOnMainThread(Action action)
{
if (IsMainThread) action();
else RunOnUiThread(action);
}
推荐阅读
- java - 询问如何从地图上的地图中获取价值,就像这段代码一样
- python - 您可以通过 tkinter-Python 运行 .exe 文件吗?
- firebase - 如何从文档中获取特定字段值
- spring - 以下方法不存在:scala.Product.$init$(Lscala/Product;)V
- javascript - Chrome 驱动程序版本早于安装
- encryption - 了解 JSEncrypt
- c# - 如何解决 ASP.NET MVC 中的 redirect_uri_mismatch?
- angular - Ionic 5 应用程序中的应用程序数据使用和存储信息
- python - 访问keras批量预测中的数据顺序
- javascript - JavaScript 从剪贴板复制和粘贴文件 - 适用于浏览器,但不适用于桌面