首页 > 解决方案 > 关于 Activity.RunOnUIThread 的问题

问题描述

RunOnUIThread感觉就像 Android 应用程序中的 UI 线程只是 UI 线程,是同一线程用于整个单个应用程序的所有活动吗?

如果是这样,我必须使用Activity.RunOnUIThread吗?或者有没有其他选择?

标签: xamarin.android

解决方案


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);
}

推荐阅读