Android Service基本用法

来源:互联网 发布:怒蛙网络 编辑:程序博客网 时间:2024/05/16 12:20

1.什么是Service?
Service是Android中实现程序后台运行的解决方案,它非常适合执行那些不需要和用户交互但是需要长期运行的任务。服务的运行不依赖任何用户界面,即使程序被切换到后台,后者用户打开了另外一个应用程序,服务仍然能够保持正常的运行。

2.服务和线程有什么关系?
通常,我们在程序中通过开启子线程来达到执行耗时任务的目的。那么,Service也在后台运行,也可以执行耗时操作,那它们的区别在哪里呢?其实,服务就是服务,线程就是线程,他们之间没有一毛钱的关系。服务是Android提供的后台运行程序的解决方案,通过这种解决方案,Activity可以很容易的去控制后台程序,也可以很容易的和后台程序交互。试想,如果没有Service,我们在Activity中之间开启子线程来执行耗时的操作,那么这时候我们的Activity什么时候去控制子线显,这时候Actvity还敢轻易的finish()吗?Activity结束之后子线程也就结束了,但是,这时候你能保证耗时操作完成了吗?所以,Service的出现,正是解决了这么一系列的问题。这样,我们就可以很方便的去执行后台任务了。
需要注意的是,服务并不是运行在一个独立的进程当中的,而是依赖于创建服务时所在的应用程序进程。当某个应用程序进程被杀掉时,所有依赖于该进程的服务也都会停止。
另外,不要被服务的后台概念所迷惑,实际上服务并不会自动开启线程,所有的代码都是默认运行在主线程中的。也就是说,我们需要在服务内部手动创建子线程,并在这里执行具体的任务,否则,就有可能ANR。

3.服务的基本用法
服务的基本用法也就是如何启动服务、如何停止服务、服务如何与Activity进行交互了。

(1).启动服务有两种方式:Activity.startService() Activity.bindService()
两者的区别主要体现在调用者和被调用者的生命周期上:通过StartService启动Service之后,调用者和被调用者没有任何的关系,而通过bindService()启动Service之后,如果调用bindService()函数的Activity结束了生命周期,那么该Activity启动的Service的生命周期也就结束了。

(2).销毁服务
I.通过startService()启动的服务,调用stopService()即可销毁,或者在Service里面调用stopSelf()。
||. 通过bindService()启动的服务,调用unBindService即可销毁
III.如果是先startService(),再通过bindService()绑定,那么需要同时调用stopService()和bindService()才可以销毁服务。
注意:多个Activity可以同时绑定一个服务,并且获得同一个IBinder对象,这个时候只有所有Activity与服务都解绑时,服务才会销毁。(一个Service必须要在既没有和任何Activity关联又处于停止状态的时候才会被销毁。)

(3).Activity与Service交互
未完待续。。。