android - thread/runnable, handler, runonuithread, asynctask 之间的区别

标签 android multithreading android-asynctask handler

我开始学习安卓编程,并且正在开发一款小游戏。我听说做后台操作或更新或下载或任何后台和耗时的事情不应该用 ui thread 来完成,而是使用 thread/runnable 或 asynctask。但是我不能在线程中做一些事情,比如后台连接到数据库,因为这个连接与剩余的处理程序一起工作,runonuithread,asynctask.am 非常困惑在哪里使用哪个。 我有一些问题 1.handler、runonuithread 都运行在 ui 线程上,thread/runnable 是不同的线程,在异步任务中,doinbackground 方法运行在不同的线程上,其他方法如 onprogressupdate、onpreexecute 和 onpostexecute 运行在 ui 线程上。正确的? 如果那样的话,我写了一个程序来与线程/可运行的数据库连接,它没有工作,但是当我在 doinbackground 中编写它时,它工作了。我感到困惑的是,由于这两种方法都在不同的线程上运行,所以会发生这种情况。 2. 这 4 个的主要区别是什么,它们适用和不适用的地方。 并且还想知道只有 ui 线程可以执行的任务是什么。 感谢 adv:)

最佳答案

Handler 允许您发布要在主 UI 线程上执行的消息。 Activity#runOnUiThread(Runnable) 是一种在内部使用 Handler 以在 UI 线程上发布 Runnable 的便捷方法(参见 source code ). Handler 通常用于将后台线程上生成的事件与主 UI 线程同步。例如,由于不能在后台线程上直接修改 View 和其他 UI 小部件,因此后台线程可能会发布一条消息,在主 UI 线程上而不是在后台进行这些修改.

AsyncTask 是一个实用类,它使用线程池来执行任务并提供有用的回调方法(即 onPreExecuteonPostExecute 等.) 保证在主 UI 线程上执行(换句话说,它从开发人员那里抽象出 Handler 的概念)。

关于android - thread/runnable, handler, runonuithread, asynctask 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26938265/

相关文章:

java - Android 上的 SimpleDateFormat 时区错误

java - 使用 System.out.print 与 println 的多线程问题

java - Android - AsyncTask 中的 setAdapter()

Android 异步任务减慢了我的 UI 线程

android - doInBackground 运行时是否可以停止 asynctask?

java - Retrofit 2 : response. body()为空,但状态码为200

java - 禁用单击 SwipeRefreshLayout 内的 RecyclerView

未找到 Android NDK 和 JNI native 方法

java - 假装同步的异步 websocket 机制

java - ForkJoinPool.commonPool() 和 new ForkJoinPool(availableCPU - 1) 有什么区别?