应用程序主线程并不总是UI线程,当活动停止时,activity的onStop被执行,因此UI线程被从该活动中移走并移动到相同或不同应用程序中的另一个活动。然而,这并不意味着应用程序不再处于活动状态,它可以继续在后台工作,直到它被操作系统或用户关闭。那么谁让它在后台运行?它是主线程而不是UI线程。
在Android中,服务是一个应用程序组件,可以在UI线程的后台执行长时间运行的操作。通过背景,这意味着它没有用户界面。服务默认在调用Component进程的主线程上运行(因此可能会降低响应速度并导致ANR),因此您应该创建一个新线程来执行长时间运行的操作。服务也可以在完全不同的过程中运行。 Unlike Activity components, Services do not have any graphical interfaces. Also Broadcast Receivers are for receiving broadcast messages (broadcast, multicast, unicast) and perform short tasks whereas Services are meant to do lengthy processing like streaming music, network transactions, file I/O, interact with databases, etc. When a Service is started by an application component like an Activity it runs in the background and keeps running even if the user switches to another application or the starting component is itself destroyed
IntentService
很多时候,启动一个Service就是要它完成一个复杂而耗时的任务,完成之后,这个Service就可以退出了。
例如文件下载。Activity界面启动负责下载的Service,Service安静的下载,下载完成了,就可以自己退出。下载的过程中,Activity可以继续显示下载的进度,也可以不用关心当前的状态而完全退出。
Android SDK为开发者准备好了这样一个现成的Service-IntentService。
IntentService是Service的子类,就是为了上面的那种使用场景而设计的。Android SDK对Service类进行了进一步的封装和扩展,方便开发者直接使用,而不需要重新造轮子了。
使用IntentService,
继承IntentService,实现它的onHandlerIntent()函数。onHandlerIntent()是在工作线程中被调用的,所以可以在它当中添加耗时的任务处理,
网上一个回答很有趣
网友评论