- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
有人可以向我解释一下 UI 线程到底是什么吗?在 developer.android.com 上,它提到了 runOnUiThread 函数
public final void runOnUiThread (Runnable action)
Since: API Level 1 Runs the specified action on the UI thread. If the current thread is the UI thread, then the action is executed immediately. If the current thread is not the UI thread, the action is posted to the event queue of the UI thread.
UI 线程是否意味着每次 Activity 被某些 ui Activity (如来电或屏幕变暗等)推送到后台时都会运行此线程?如果不是,那么 UI 线程究竟包括什么?
谢谢
最佳答案
UIThread 是应用程序执行的主线程。这是运行大多数应用程序代码的地方。您的所有应用程序组件(Activity、Services、ContentProviders、BroadcastReceivers)都在此线程中创建,对这些组件的任何系统调用都在此线程中执行。
例如,假设您的应用程序是单个 Activity 类。然后所有生命周期方法和大部分事件处理代码都在这个 UIThread 中运行。这些是 onCreate
、onPause
、onDestroy
、onClick
等方法。此外,这是所有对 UI 进行了更新。任何导致 UI 更新或更改的事情都必须在 UI 线程上发生。
For more info on your application's Processes and Threads click here.
当您显式生成一个新线程以在后台执行工作时,此代码不会在 UIThread 上运行。那么如果这个后台线程需要做一些改变 UI 的事情会发生什么呢?这就是 runOnUiThread
的用途。实际上,您应该使用 Handler(有关此内容的更多信息,请参见下面的链接)。它为这些后台线程提供了执行可以修改 UI 的代码的能力。他们通过将 UI 修改代码放入 Runnable 对象并将其传递给 runOnUiThread 方法来做到这一点。
For more info on spawning worker threads and updating the UI from them click here
我个人只在我的 Instrumentation 测试中使用 runOnUiThread
方法。由于测试代码不在 UIThread 中执行,因此需要使用该方法运行修改 UI 的代码。因此,我使用它将点击和按键事件注入(inject)我的应用程序。然后我可以检查应用程序的状态以确保发生了正确的事情。
For more info on testing and running code on the UIThread click here
关于android - 什么是Android UiThread(UI线程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3652560/
我正在开始一个新的 Android 项目,并且想了解有关 OrmLite 的所有信息 + 使数据库访问远离 UI 线程。 OLD:在我的上一个项目中,我为每个插入/更新/删除调用使用了一个 Threa
虽然在自己的线程上运行长期任务很有用,但为了更新 UI 组件,需要在 UIThread 中运行代码。否则,您的应用程序将在执行期间抛出 CalledFromWrongThreadException。如
doAsync { doSomethingAsync() uiThread { doSomethingUiThread() } } 基于上面的代码。我知道 do
我正在尝试使用 Bluetooth 将 android 数据发送到 arduino .My gui 包含一个 SeekBar和加速度计读数。所有Sockets已成功形成,如果我将数据写入 Output
有人可以向我解释一下 UI 线程到底是什么吗?在 developer.android.com 上,它提到了 runOnUiThread 函数 public final void runOnUiThre
使用 android-annotations 我可以替换 AsyncTask与 @UiThread . 但是可以处理像 AsynkTask 的 onPreExcecute/onPostExecute
当 MediaPlayer 正在播放时,我在 UIThread 上有一个 Runnable 更新 SeekBar。然而,当我切换到另一个 Activity 时,我的应用程序因异常而崩溃,导致 Runn
我正在使用显示用户联系人的 UITableView。对于一些拥有大量联系人(5000 多个联系人)的用户,tableview 也有 5000 多行。 具有约 12k 行的演示案例中的 reloadDa
AndroidAnnotations提供一个注释,允许在 UI 线程上运行一个方法,无论它是从哪个线程调用的,例如 void myMethod() { doInUiThread("hello"
我目前正在使用 Anko 的 doAsync 来处理异步任务。具体来说,我使用它来解析对数据对象的 ArrayList 的响应 json,如下所示: // Asynchronously parse s
我有一个类,它通过 PRISMs 事件聚合器订阅一个事件。 因为模拟事件聚合器有点困难,如 here 所述。 ,我只是实例化一个真实的并将其传递给被测系统。 然后在我的测试中,我通过该聚合器发布事件,
我使用名为“Fuel”的库从服务器获取数据,这是我的代码: button1.setOnClickListener { val jb = "{......}"
标题说明了一切。好吧,主要是。这只发生在 1 台设备上。其他设备没问题。 在 AsyncTask 的 onPostExecute 中,我调用下面的代码,在得到这个异常之前我没有 runOnUiThre
我正在使用 OkHttp3 执行 GET API 调用,该方法有效,但是我想使用 GET 调用的结果更新 UiThread 中的 TextView (jsonTextView)。 我尝试了 10 种不
我是 Android 开发的新手,这是我的第一个应用程序。 问题可能很简单,但我找不到解决方案。 此应用程序是一个简单的 ImageViewer,应用程序必须连接到服务器,并且根据某些数据,服务器将返
第一遍似乎要么使可绘制区域无效,要么绘制背景。第二遍渲染菜单。如果有任何延迟(如下面的示例所示),则会出现灰色方 block 闪烁效果。 这是 Linux 上的 JDK8。 如何停止这种闪烁效果? p
我想在 UiThread 上运行的线程中显示 toast 消息,但在我的调用中似乎未正确引用 Runnable。请在下面查看我非常基本的实现: this.runOnUiThread(new Runna
我以为 @UiThread和 @MainThread是同一件事。 最佳答案 @MainThread 是您启动应用程序时第一个开始运行的线程 @UiThread 从渲染用户界面的主线程开始 同样来自 A
thread = new Thread() { public void run() { super.run(); System.out.
private Handler workerHandler; // instance variable of UIThread 在 onCreate() 方法中 WorkerThread wt = n
我是一名优秀的程序员,十分优秀!