6

请原谅我的问题,因为我对编程还是很陌生,所以我不完全理解主线程、异步任务、服务和线程的概念。我正在阅读有关 Android 服务的文档,因为我想在主线程之外执行一些任务。它说:

如果您需要在主线程之外执行工作,但仅在用户与您的应用程序交互时执行,那么您可能应该创建一个新线程而不是服务。

1.他们是说“线程”在您离开应用程序后立即停止(即:主页按钮)?

例如,如果您想播放一些音乐,但仅在您的活动运行时,您可以在 onCreate() 中创建一个线程,在 onStart() 中开始运行它,然后在 onStop() 中停止它。还可以考虑使用 AsyncTask 或 HandlerThread,而不是传统的 Thread 类。有关线程的更多信息,请参阅进程和线程文档。

2.如果线程被烘焙到Java中,为什么android有AsyncTasks?

请记住,如果您确实使用了服务,默认情况下它仍会在应用程序的主线程中运行,因此如果它执行密集或阻塞操作,您仍应在服务中创建一个新线程。

3.这是否基本上意味着,几乎每个服务基本上都会在其中创建一个线程?

4. 在服务内部启动 AsyncTask 会不会不好?

4

4 回答 4

11

1.他们是说“线程”在您离开应用程序后立即停止(即:主页按钮)?

AThread应该在Thread启动它时被销毁。因此,如果您Thread在 an 中启动 aActivity那么它应该在它Activity被销毁或转移到 a时被销毁Service。例如,您可以在 a 中开始音乐Thread并在那里更新歌曲,但如果您希望它在被销毁时继续播放,Activity那么应该将它移到 aService

2.如果线程被烘焙到Java中,为什么android有AsyncTasks?

AnAsyncTask允许您执行后台工作UI,并通过使用其任何内置方法轻松更新后台工作完成之前、期间和之后,除了因为它是doInBackground()唯一不在UI Thread

3.这是否基本上意味着,几乎每个服务基本上都会在其中创建一个线程?

不一定,但您可以在其中创建一个Thread内部

4. 在服务内部启动 AsyncTask 会不会不好?

不,你可以这样做。

AsyncTask是做后台工作的好方法。它的方法使得更新UI. 但是您需要仔细阅读文档(甚至可能几次),以确保您完全了解如何使用它们。另外,请记住,这些是用于短期操作的,因此它们可以很好地下载网络数据,但不应该用于持续时间超过几秒钟的事情(根据文档)

于 2013-07-30T18:22:41.003 回答
5
  1. 当您离开应用程序时,线程不会立即停止。使用单独线程的建议只是为了不阻塞应用程序的 GUI。

  2. AsyncTasks 实际上在幕后使用 ThreadPool,因为创建线程是一个昂贵的过程。如果您有许多短期任务,那么使用AsyncTask只是一种快速、简单但有效的方式来执行它们,而不会阻塞应用程序的 GUI。

  3. 是的,基本上。不过,服务比线程更重。使用服务代替线程不是一个好主意。此外,实际上可以使服务在整个其他进程上执行。仅供参考。

  4. 不,如果您有许多短期任务要执行,那将是一个好主意。

如果您只是尝试在主线程之外执行任务,则不需要服务。只需创建另一个线程。

AsyncTask在幕后只是将您的任务提交到线程池执行。如果您有许多短期任务,例如解析网络流量,那就AsyncTask太好了。

但是,如果您正在处理大量请求,您可能希望对执行任务的线程池进行更多控制。

于 2013-07-30T18:18:16.910 回答
1
  1. 因为主线程控制 UI,而异步任务可以在保持 UI 无延迟的同时完成更繁重的任务。

  2. 不,但是如果您希望您的服务进行繁重的工作,例如从互联网加载内容,那么它应该使用异步任务。大多数服务用于从 Internet 加载数据,因此它们中的大多数都有异步任务。请注意,要使服务在活动终止后保持活动状态,您必须指定它。除非配置正确,否则默认情况下服务会与活动一起死亡

于 2013-07-30T18:18:46.190 回答
0

您可能对线程、任务和进程感到困惑。任务是一种小型进程。进程是在您的系统示例中运行的程序,当启动任务管理器时,它显示所有进程像 Internet-explorer 一样运行,但线程是小型轻量级进程意味着您可以说子进程在执行某些任务时执行,但在 android 中异步与线程类似,但它可能很长。以 android 中的示例为例,您正在 android-phone 中玩 Temple-run,有人打电话给你,以便执行高优先级任务,当前线程在那里暂停,还有很多方法,比如 onCreate() ,onPause(),你可以理解。

于 2013-07-30T18:28:14.967 回答