thread/runnable、handler、runonuithread、asynctask 之间的区别



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

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

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

您好,我会尝试给您最简单的解释!

Thread 是一个类,它使您能够使用时髦的多任务处理。这是一个标准的Java类。每个Java环境(在你的例子中是Android)都可以使用它。

Runnable 是一个与 Thread 类几乎相同的接口,但它更简单一些。为了使用它,你只需要实现方法run()。

Handler 是 Thread 类的一个更花哨的、特定于 Android 的变体。有一些特定的功能和其他有用的东西。

RunOnUiThread是一种方法,它使我们能够访问Android中的主线程或又名UI线程!是的,又是这个简单的词线程!因为在Android中,你不能从另一个线程修改UI,除了主线程(或又名UI)线程,谷歌提供了一种访问这个线程的方法。

异步任务 最有价值和最酷的类扩展!它旨在简化我们作为开发人员的生活,并在Android环境中做到最好。它可以再次被视为线程,但"简化"和"统一"。这意味着使用AsyncTask是简单,容易和非常有用的!


AsyncTask 是 c00l,这就是为什么我会给你一个简短的描述:

要使用它,最佳做法是在类中扩展 AsyncTask。 比你需要实现 3 个方法!是的,只有三个!

第一个用作"准备"。在这种方法中,所有正在发生的事情都在新的并行线程启动之前。

第二个用于在新线程中完成您的工作!!1

最后一个(第三个)用于在新创建的线程中完成工作后执行一些任务。


如果你足够感兴趣,我相信你可以找到几十个教程和例子来解释这一点,但我的观点是你只需要尝试它们!

记得最重要的是在最需要的时候使用结构。当您可以使用更简单的结构时,不要使用复杂的结构。当然,AsyncTask或Handler类的存在并非巧合,它们是为了帮助我们!

祝你好运,我希望这个简短而垃圾的解释不会太混乱。

最新更新