Android 何时使用哪种方式访问UI线程?
根据文档,应该使用三个选项中的一个从不同的线程访问UI线程。 这些是选项:Android 何时使用哪种方式访问UI线程?,android,multithreading,user-interface,Android,Multithreading,User Interface,根据文档,应该使用三个选项中的一个从不同的线程访问UI线程。 这些是选项: Activity.runOnUiThread(可运行) View.post(可运行) View.postDelayed(可运行,长) 我什么时候应该用哪个?它们似乎都向UI线程的消息队列添加了一个Runnable 我假设postDelayed只有在您想为以后安排Runnable时才真正有用,他们只是提到它,因为它也在UI线程上运行Runnable 对于额外的混乱,还有异步任务。我现在应该什么时候使用它?我总是选择runO
对于额外的混乱,还有异步任务。我现在应该什么时候使用它?我总是选择runOnUiThread,我认为这是在同一UI线程上运行某些东西的最佳方式。
异步任务很棘手,这是一个好主意,但如果您想使用新的东西,请使用加载程序或IntentService。RunnuIthread和视图。post完全相同,它们都向活动的处理程序发送可运行对象。所以随便你用吧 关于异步任务,它不用于在UI线程上运行。但在异步任务完成工作后,它会在UI线程上调用名为
onPostExecute
的方法
关于这个主题有一个非常好的教程忘记
AsyncTask
,它不是在UI线程中运行代码,而是在后台线程中运行代码,从UI线程启动AsyncTask
关于其他选项,请随意选择其中任何一个。如果您正在处理
视图
对象,则很可能您已经在UI线程上。因此,您最好从另一个线程中引用活动
上下文,并调用runOnUiThread我建议您使用,它们被设计用于在其他线程()中进行艰苦工作,然后与UI线程同步以推送工作结果(),当然,您可以使用工作进度()定期更新UI
如果您想在比Honeycom更大的Android版本上同时运行多个AsyncTask,您可以使用我的small lubrary:如果您需要一种返回UI线程的机制,该机制在任何地方都可用,而不需要上下文,您可以使用以下方法:
Handler handler = new Handler(Looper.getMainLooper());
handler.post(Runnable);
AsyncTasks是最具逻辑性的类之一,因为它们具有线性执行模式。执行如下:
onPreExecute()
(UI线程)->doInBackground()
(非UI线程)->此方法完成后,将结果传递给onPostExecute()
(UI线程)。简单!