我是Android应用程序开发的初学者。我正在使用android中的线程。我读过关于在主用户界面上运行代码的runOnUiThread
(如果我没错?我想。)。
我的问题是主用户界面上的普通代码与runOnIUThread
内的代码有什么区别。
示例1
class A
{
getDataFromServer(foo);//Code on mainUI
}
示例:2
getActivity.runOnUiThread(new Runnable(){
@Override
public void run(){
getDataFromServer(foo);
}
});
这两个例子有什么不同。请帮助我。你的回复对我来说将是一个新的学习。
答案 0 :(得分:13)
假设您的UIThread代码是简单的代码,
什么是帖子?
线程定义正在运行的进程
首先 runOnUiThread ..
在 UI线程上运行指定的操作。 如果当前线程是 UI线程,然后立即执行操作。如果是当前的 线程不 UI线程,该操作被发布到事件队列 UI线程。
什么是 UIThread
您的大多数应用代码都会在hello
,world
,world"hello
,onCreate
等处运行。
所以简单导致UI更新或更改的任何内容都会在UI线程上发生
当您显式生成新线程以在后台中工作时,此代码不会在UIThread上运行。如果您想要执行某些更改,该怎么办?用户界面?
然后欢迎您onPause
如果要从非UI线程更新UI,则必须使用onDestroy
。例如 - 如果要从后台线程更新UI。你也可以使用onClick
来做同样的事情。
答案 1 :(得分:2)
通常,您的代码在UI线程上执行。对于更长时间的任务(例如网络请求等),您将使用后台任务(Handler,AsyncTask,Thread,...)。
由于您的视图只能从UI线程触及,如果您在后台线程中执行代码并且需要更新您的视图,则使用runOnUiThread()
,从此后台线程
答案 2 :(得分:1)
为了解释“为什么”Android具有'runOnUiThread()'选项,重要的是要了解java仅用于创建Android使用的字节码(dex)。手机上运行的代码不是java。
此外,Android线程'可以'有一个叫做'looper'的东西。这个'looper'是通过队列按顺序处理'任务(技术上可运行和消息)'的东西。默认情况下,'主ui线程'已经附加了一个looper。
这意味着您创建的runnable被放到主UI线程的looper队列中。 (这就是为什么runnable不会立即运行,但会很快'/'很快'''
你使用runnable在UI线程上运行代码的原因是因为你在你创建的其他“后台线程”中......并希望以某种方式更新UI。 (只有UI线程可以与UI交互)