android SDK:
service运行在宿主进程中的主线程中(即UI线程),不创建自己的线程,不运行在一个单独的进程中(除非你专门指定)。
因此,如果你的service要做的工作很占CPU或者会有阻塞(例如mp3播放、网络任务),最好在service中创建一个新的thread来做这些工作,这样主线程能够专注于activity的用户交互,从而减少ANR(程序无响应)异常的发生。
到底该用service还是用thread?
如果任务只在应用程序与用户有交互的情况下产生,并且任务很占时间或者会引起阻塞,则另起thread或者HandlerThread。
如果在应用程序与用户无交互的情况下仍需处理任务,那么用service,因为service是在后台运行的,同时仍要注意是否需要在service中另开thread。
Context.startService()方式启动的service会先后调用onCreate()、onStart()方法,这种方式启动的service不会与调用者有任何关系,即使调用者退出了,service仍然继续运行。
Context.bindService()方式启动的service会先后调用onCreate()、onBind()方法,调用者与服务绑定在一起,调用者一旦退出,服务立即终止。