可运行、线程、RunOnUIThread
Runnable, Thread, RunOnUIThread
今天,我通过使用 Runnable 处理一段代码 inserting/updating 并删除了一些数据库内容,设法大大加快了我的 Android 应用程序的速度。但是我也使用了 RunOnUiThread() 和普通的 Thread() 但我不知道这三者之间有什么区别。我知道 ASyncTask,但是您如何选择要使用的对象以及主要区别是什么?
向另一个站点提供解释/link 会非常好。
亲切的问候。
当您从普通线程修改 UI 上的某些值时,例如 (textBox.text),它会引发异常。所以你必须在那里使用 RunonUiThread() 来同时与 UI 和 运行 异步共享值。
normalThreadMethod(){
textBox.text = "Test"; //Exception
}
RunOnUIThread(){
textbox.text = "Test"; //no error
}
你写的大部分代码默认运行在UI线程,即主线程。关于View
的一些操作必须在UI线程上执行。消耗大量资源的操作应该在 UI 线程之外执行。
您可以通过调用new Thread(Runnable).start()
来启动一个新的Thread
,然后该任务将在非UI线程上执行。但是建议使用像ExecutorService
这样的线程池来做这个,因为它会重用线程。
对于 AsyncTask
,doInBackground()
中的代码在 AsycTask
的静态线程池中的非 UI 线程上运行,而 onPostExecuted()
在 UI 线程上执行。所以你应该在 onPostExecuted()
.
中做 UI 操作
使用 Handler
时,handleMessage()
代码运行的位置基于您传递给 Handler
的构造函数的 Looper
。默认情况下,它是 Looper.getMainLooper()
,因此它在 UI 线程上运行。
今天,我通过使用 Runnable 处理一段代码 inserting/updating 并删除了一些数据库内容,设法大大加快了我的 Android 应用程序的速度。但是我也使用了 RunOnUiThread() 和普通的 Thread() 但我不知道这三者之间有什么区别。我知道 ASyncTask,但是您如何选择要使用的对象以及主要区别是什么?
向另一个站点提供解释/link 会非常好。
亲切的问候。
当您从普通线程修改 UI 上的某些值时,例如 (textBox.text),它会引发异常。所以你必须在那里使用 RunonUiThread() 来同时与 UI 和 运行 异步共享值。
normalThreadMethod(){
textBox.text = "Test"; //Exception
}
RunOnUIThread(){
textbox.text = "Test"; //no error
}
你写的大部分代码默认运行在UI线程,即主线程。关于View
的一些操作必须在UI线程上执行。消耗大量资源的操作应该在 UI 线程之外执行。
您可以通过调用new Thread(Runnable).start()
来启动一个新的Thread
,然后该任务将在非UI线程上执行。但是建议使用像ExecutorService
这样的线程池来做这个,因为它会重用线程。
对于 AsyncTask
,doInBackground()
中的代码在 AsycTask
的静态线程池中的非 UI 线程上运行,而 onPostExecuted()
在 UI 线程上执行。所以你应该在 onPostExecuted()
.
使用 Handler
时,handleMessage()
代码运行的位置基于您传递给 Handler
的构造函数的 Looper
。默认情况下,它是 Looper.getMainLooper()
,因此它在 UI 线程上运行。