启动一个service有两种方式:
Caution:一个service运行在宿主进程的主线程中——service不创建自己的线程,并且不运行在一个单独的进程中。意思就是说,如果你的service打算做一些使用cpu密集的工作或者阻塞的操作(例如MP3播放或者网络操作),你必须创建一个新的线程去做一些工作。使用一个单独的线程,你可以减少出现ANR的几率,并且应用的主线程可以专注于和用户交互。
上面说了,在service线程是在主线程中运行的,所以不能执行耗时任务,如果要执行耗时任务可以在onStartCommand方法中启动一个子线程,其实service还提供了另一个方案,那就是IntentService,他是Service的子类。下面翻译一些官方的文档,对IntentService做个介绍。
IntentService 是Service的子类,他使用一个工作线程去处理所有的请求,每次处理一个。如果你不需要大量的同步请求,这是一个非常好的选项。你要做的就是实现onHandleIntent()方法,他接受intent请求,并在后台线程中处理。
IntentService做一下的事情:
[stopSelf()](http://developer.android.com/reference/android/app/Service.html#stopSelf%28%29)
.方法[onStartCommand()](http://developer.android.com/reference/android/app/IntentService.html#onStartCommand%28android.content.Intent,%20int,%20int%29)
方法的默认实现,并把intent传递给工作队列,然后发送给onStartCommand(),。关于onStartCommand() 方法的返回值:
此方法的返回值一定是一个整数,系统根据这个值来决定当onStartCommand() 方法执行完成后,系统由于某种原因关闭服务后将如何处理。返回值为如下几个:
手机扫一扫
移动阅读更方便
你可能感兴趣的文章