我开始学习安卓编程,并且正在开发一款小游戏。我听说做后台操作或更新或下载或任何后台和耗时的事情不应该用 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
是一个实用类,它使用线程池来执行任务并提供有用的回调方法(即 onPreExecute
、onPostExecute
等.) 保证在主 UI 线程上执行(换句话说,它从开发人员那里抽象出 Handler
的概念)。
关于android - thread/runnable, handler, runonuithread, asynctask 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26938265/