服务或线程或AsyncTask

EGH*_*HDK 6 java android android-service android-asynctask

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

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

1.他们说你离开应用程序后立即停止"线程"(即:主页按钮)?

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

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

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

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

4.在服务中启动AsyncTask是不是很糟糕?

cod*_*gic 11

1.他们说你离开应用程序后立即停止"线程"(即:主页按钮)?

A Thread应该在Thread它被破坏时被销毁.因此,如果你Thread在a 中开始,Activity那么当它Activity被销毁或转移到a 时应该被销毁Service.例如,你可以在a中启动音乐Thread并在那里更新歌曲但是如果你希望它在Activity被破坏时继续播放那么它应该被移动到Service

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

一个AsyncTask可以让你执行后台工作,并轻松地在更新UI之前,期间,和之后的工作背景是利用它的任何内置方法除了做doInBackground(),因为它是唯一一个没有在运行UI Thread

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

不一定,但你可以创建一个Thread内部

4.在服务中启动AsyncTask是不是很糟糕?

不,你可以这样做.

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


Wil*_*son 5

  1. 离开应用程序时,线程不会立即停止.建议使用单独的线程只是为了不阻止应用程序的GUI.

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

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

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

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

AsyncTask在幕后只需将您的任务提交给线程池执行即可.如果您有许多短期任务,例如解析网络流量,那就AsyncTask太棒了.

但是,如果要处理大量请求,则可能需要对执行任务的线程池进行更多控制.

  • 不,你只需要在非gui线程上进行联网.由于Async任务在非gui线程上执行,因此*可以*使用,但它不是唯一的解决方案.@Dante不,`AsyncTask`不一定是繁重的. (3认同)