android runOnUiThread与java中简单代码的区别

android runOnUiThread与java中简单代码的区别,android,multithreading,android-runonuithread,Android,Multithreading,Android Runonuithread,我是安卓应用程序开发的初学者。我在安卓中使用线程。我读过一个runOnUiThread,它在主界面上运行代码(如果我没弄错的话,我想) 我的问题是主界面上的普通代码和线程中的代码有什么区别 示例:1 class A { getDataFromServer(foo);//Code on mainUI } 示例:2 getActivity.runOnUiThread(new Runnable(){ @Override public void run(){ getDataFromServer(foo

我是安卓应用程序开发的初学者。我在安卓中使用线程。我读过一个
runOnUiThread
,它在主界面上运行代码(如果我没弄错的话,我想)

我的问题是主界面上的普通代码和线程中的代码有什么区别

示例:1

class A
{
getDataFromServer(foo);//Code on mainUI
}
示例:2

getActivity.runOnUiThread(new Runnable(){
@Override
public void run(){
getDataFromServer(foo);
}
});

这两个例子有什么不同。请帮助我。你的回答对我来说将是一个新的学习。

通常你的代码是在你的UI线程上执行的。对于较长时间的任务(如网络请求等),您将使用后台任务(处理程序、异步任务、线程等)


由于您的视图只能从UI线程进行触摸,因此如果您在后台线程中执行代码,并且需要从该后台线程更新视图,则可以使用
runOnUiThread()

要解释安卓为什么有“runOnUiThread()”选项,必须了解java仅用于创建字节码(dex)Android使用的。手机上运行的代码不是java

此外,Android线程“可以”有一个叫做“looper”的东西。这个“looper”是通过队列按顺序处理“任务(技术上可运行的任务和消息)”的东西。“主ui线程”默认已经连接了一个looper

这意味着您创建的runnable被放在主UI线程的循环器队列中。(这就是为什么runnable不会立即运行,而是将“快速”/“很快”运行的原因)


使用runnable在UI线程上运行代码的原因是,您处于您创建的其他“后台线程”中,并且希望以某种方式更新UI。(只有UI线程可以与UI交互)

假设您指的是UIThread代码的简单代码

什么是线程?

线程定义正在运行的进程

首先运行Nuithread

UI线程上运行指定的操作 UI线程,则立即执行该操作 线程不是UI线程,操作被发布到事件队列 用户界面线程的

什么是UIThread

  • 应用程序的主执行线程
  • 大多数应用程序代码将在这里运行
    onCreate
    onPause
    onDestroy
    onClick
    ,等等

    因此,任何导致UI更新或更改的事情都必须发生在UI线程上

当您显式地生成一个新线程以在后台执行工作时,此代码不会在UIThread上运行。现在,如果您想执行一些更改UI的操作,该怎么办? 然后,欢迎您使用
runOnUiThread


当您想从非UI线程更新UI时,必须使用
runOnUiThread()然后使用AsyncTask,它有preExecute和postExecute与UI交互。如果,我将更新UI表单runOnUiThread,线程内的代码进入长进程,它会阻止进一步执行(ANR)吗这意味着RunnuiThread在后台运行代码?它能创建一个R吗?不,你从你的后台线程调用
RunnuiThread
在你的主线程上执行代码,如果,我将使用这个…新线程(new Runnable(){(At)Override public void run(){runnuiThread(new Runnable(){(At)重写公共void run(){//Code here}}});}}}).start();runOnUiThread是否可以阻止进一步执行,换句话说,如果线程进入长进程,它是否可以创建一个R?这取决于你的任务..如果有任何类型的进程,你应该使用处理程序t为这些后台线程提供执行可以修改UI的代码的能力。它们通过将UI修改代码放入Runnable对象并将其传递给runOnUiThread方法。Activity.runOnUiThread()是更通用的处理程序的特例。使用处理程序,您可以在自己的线程内创建自己的事件查询。使用默认构造函数实例化的处理程序并不意味着“代码将在UI线程上运行”通常。默认情况下,处理程序绑定到从中实例化它们的线程。因此,如果您怀疑这种ANR,请使用处理程序