Xamarin.android 有关Activity.runUnuithRead的问题
Xamarin.android 有关Activity.runUnuithRead的问题,xamarin.android,Xamarin.android,RunOnUIThread感觉Android应用程序中的UI线程就是UI线程, 在单个应用程序中用于所有活动的线程是否相同 如果是,我是否必须使用Activity.RunOnUIThread? 或者有其他选择吗?当您从工作线程运行命令(例如snackbar)时,会使用runonUIthread。任何影响显示的内容都应该在同一线程上,以防止出现奇怪的瑕疵。万一你不知道,android是多线程的。它对UI使用一个线程,如果您正确地编程,您所做的任何处理都是在不同的线程上进行的。这样,您的界面总是表现
RunOnUIThread
感觉Android应用程序中的UI线程就是UI线程,
在单个应用程序中用于所有活动的线程是否相同
如果是,我是否必须使用Activity.RunOnUIThread
?
或者有其他选择吗?当您从工作线程运行命令(例如snackbar)时,会使用runonUIthread。任何影响显示的内容都应该在同一线程上,以防止出现奇怪的瑕疵。万一你不知道,android是多线程的。它对UI使用一个线程,如果您正确地编程,您所做的任何处理都是在不同的线程上进行的。这样,您的界面总是表现得非常平滑 在单个应用程序中用于所有活动的线程是否相同 Android中的线程比你想象的要简单,一般来说,任何应用程序都可以有
n
个线程,但只有一个UI线程。在其上进行所有与UI相关的更改的线程称为UI线程。使用RunOnUIThread
如果当前线程是UI线程,则该代码将立即执行,否则(如果当前线程不是UI线程),代码将在UI线程的事件队列中排队。如果您在UI中进行了任何更改,并且它位于某个后台线程中,例如基于异步等待的Restful Api
调用,那么它将不会得到反映,因为这不是在后台线程上进行的,因此运行的“活动”不知道id,由于RunOnUIThread
仅在片段中的活动上下文中可用,因此您需要使用activity属性获取并使用它
如果是,我是否必须使用Activity.RunOnUIThread?或者有其他选择吗
它并不总是需要的,但在某些情况下,您可能想要使用它。(如上所述)
例如:异步方法在执行完成后打开弹出窗口,需要使用RunOnUIThread
方法,否则弹出窗口或警报将永远不会显示,因为更改不是在UIThread上进行的,而是在异步后台线程上进行的
类似地,如果您有一个OnCreate
方法,并且如果您决定直接在OnCreate
方法中写入该方法,您需要在页面打开时立即显示警报,那么在这种情况下,您可能无法在UIThread上运行它。(RunOnUiThread
在UI线程上运行代码(惊奇!)。如果当前线程是UI线程,则该代码将立即执行,否则(如果当前线程不是UI线程),代码将在UI线程的事件队列中排队
UI线程是执行的主线程,大多数代码都在其上运行。(实际上,任何更改UI的代码都应该在UI线程上运行)
我是否必须使用活动.RunOnUIThread
当您处于非UI线程(例如:后台线程)中时,必须使用RunOnUIThread
或者有其他选择吗
如果您的意思是有没有其他方法可以强制代码在UI线程上运行,是的,我认为您可以使用处理程序(这可能会有帮助:)
奖励:以下是我的两个与问题相关的帮助方法:
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);
}