Android Service 线程问题

来源:互联网 发布:大数据相关体系架构 编辑:程序博客网 时间:2024/04/30 14:47

Service的线程问题

默认情况下Service是运行在启动该Service的应用主线程的,如果Service中的操作占用大量的CPU资源或有阻断操作(比如播放MP3或者访问网络)会影响应用主线程的响应性能,甚至会造成“应用程序无响应(ANR)”问题。


什么是StartedService

就是应用程序组件中通过startService()启动的服务。


StartedService的生命周期问题

一个StartedService一旦被启动将无期限的运行下去。除非调用stopSelf()把自己停止,或者其它应用程序组件调用stopService()把该服务暂停。

所以,为了节省系统资源和电池电量,在通过startService启动一个服务以后,在工作完成以后一定要调用stopSelf()把服务停止。


多次通过startService启动同一个Service会怎么工作?

如果该Service正在运行,多次通过startService启动该Service并不会启动多个该Service。只有第一个请求,才会导致该Service被创建,也就是该ServiceonCreate()回调函数会被调用;其它的请求只是会调用onStartCommand()回调函数。


StartedService的并发性问题

onStartCommand()返回之前,如果有另外的请求通过startService()函数传递到该Service,该Service会一直等到onStartCommand()返回之后才会再次调用onStartCommand()


onStartCommand的返回值

有三个START_NOT_STICKYSTART_STICKYSTART_REDELIVER_INTENT,很有用,需要认真了解后使用。

0 0
原创粉丝点击