[英]Service or Thread or AsyncTask
请原谅我的问题,因为我对编程仍然很陌生,所以我不完全理解mainthreads,异步任务,服务和线程的概念。 我正在阅读有关Android服务的文档,因为我想从主线程执行一些任务。 它说:
如果您需要在主线程之外执行工作,但只有在用户与您的应用程序交互时,您应该创建一个新线程而不是服务。
1.他们说你离开应用程序后立即停止“线程”(即:主页按钮)?
例如,如果您想播放一些音乐,但只有在您的活动正在运行时,您可以在onCreate()中创建一个线程,在onStart()中开始运行它,然后在onStop()中停止它。 还要考虑使用AsyncTask或HandlerThread,而不是传统的Thread类。 有关线程的更多信息,请参阅进程和线程文档。
2.如果线程被烘焙到Java中,为什么android有AsyncTasks?
请记住,如果您确实使用了服务,它默认仍然在应用程序的主线程中运行,因此如果它执行密集或阻塞操作,您仍应在服务中创建新线程。
这基本上意味着,几乎每个服务基本上都会在其中创建一个线程吗?
4.在服务中启动AsyncTask是不是很糟糕?
1.他们说你离开应用程序后立即停止“线程”(即:主页按钮)?
当破坏启动它的Thread
时,应该销毁一个Thread
。 因此,如果您在Activity
启动一个Thread
,那么当该Activity
被销毁或转移到Service
时,它应该被销毁。 例如,你可以在开始的音乐Thread
和更新的歌曲有,但如果你想继续玩时, Activity
被破坏,那么它应该被移动到一个Service
2.如果线程被烘焙到Java中,为什么android有AsyncTasks?
AsyncTask
允许您执行后台工作,并在后台工作完成之前,期间和之后通过利用除doInBackground()
之外的任何内置方法轻松更新UI
,因为它是唯一不运行的方法UI Thread
这基本上意味着,几乎每个服务基本上都会在其中创建一个线程吗?
不一定,但你可以在里面创建一个Thread
4.在服务中启动AsyncTask是不是很糟糕?
不,你可以这样做。
AsyncTask是一种很好的后台工作方式。 它的方法使得更新UI
变得非常容易。 但是您需要仔细阅读文档(可能甚至几次)以确保您完全了解如何使用它们。 此外,请记住这些是短期操作,因此它们可以很好地下载网络数据,但不应该用于持续时间超过几秒的事情(根据文档)
离开应用程序时,线程不会立即停止。 建议使用单独的线程只是为了不阻止应用程序的GUI。
AsyncTasks实际上在幕后使用ThreadPool,因为创建线程是一个昂贵的过程。 如果您有许多短暂的任务,使用AsyncTask
只是一种快速,简单但有效的方式来执行它们而不会阻止您的应用程序的GUI。
是的,基本上。 虽然服务比线程更重。 使用服务代替线程不是一个好主意。 实际上,服务也可以在整个其他进程上执行。 仅供参考。
不,如果您有许多短期任务要执行,那将是一个好主意。
如果您只是尝试从主线程执行任务,则不需要服务。 只需创建另一个线程。
幕后的AsyncTask
只是将您的任务提交给线程池执行。 如果您有许多短期任务,例如解析网络流量, AsyncTask
非常棒。
但是,如果要处理大量请求,则可能需要对执行任务的线程池进行更多控制。
没有
因为主线程控制UI,而asynctasks可以在保持UI无滞后的同时做出更重的任务。
不,但是如果你想让你的服务像从互联网上加载东西一样繁重,那么就应该使用asynctask。 大多数服务用于从互联网加载数据,因此大多数服务都具有asynctasks。 请注意,要使活动在活动消失后保持活动,您必须指定它。 除非正确配置,否则默认情况下服务会与活动一起消失
没有
你可能会因为线程,任务和进程而感到困惑。任务是一种很小的过程。进程是一个程序,它在你的系统示例中运行时启动你的任务管理器它显示所有进程像Internet-explorer一样运行但是线程是一个小的轻量级进程意味着你可以说执行中执行某些任务的子进程但是android中的异步类似于线程但它可能很长。在android中你举一个例子在android-phone中运行temple-run,而且有一个人正在打电话给你,以便执行高优先级任务并暂停当前线程,并且有很多方法就像onCreate(),onPause(),你可以理解它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.