Service概念及用途:

Android中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行,那 我们什么时候会用到Service呢?比如我们播放音乐的时候,有可能想边听音乐边干些其他事情,当我们退出播放音乐的应用,如果不用Service,我 们就听不到歌了,所以这时候就得用到Service了,又比如当我们一个应用的数据是通过网络获取的,不同时间(一段时间)的数据是不同的这时候我们可以 用Service在后台定时更新,而不用每打开应用的时候在去获取。

注意: 

    1.Service不能自己运行,需要通过某一个Activity或者其他Context对象来调用, Context.startService()和Context.bindService()。

  通过startService:

  Service会经历 onCreate -> onStart, stopService的时候直接onDestroy,如果是调用者自己直接退出而没有调用stopService的话,Service会一直

  在后台运行。下次调用者再起来可以stopService。

  通过bindService:
      Service只会运行onCreate,这个时候调用者和Service绑定在一起,调用者退出了,Srevice就会调用onUnbind->onDestroyed所谓绑定在一起就共存亡了。
 Service的onCreate的方法只会被调用一次,就是你无论多少次的startService又bindService,Service只被创建一次。如果先是bind了,那么start的时候
 就直接运行Service的onStart方法,如果先是start,那么bind的时候就直接运行onBind方法。如果你先bind上了,就stop不掉了,对啊,就是stopService不好了,
只能先UnbindService, 再StopService,所以是先start还是先bind行为是有区别的.
2.Service是跑在主线程中,如果在service的onCreate或onStart方法中有耗时操作,需要放到单独的线程中,否则会影响 到UI操作或者阻塞主线程中的其他事情或者抛出ANR异常.
Service生命周期 :
Android Service的生命周期并不像Activity那么复杂,它只继承了onCreate(),onStart(),onDestroy()三个方法,当我们第一次启动Service时,先后调用了
onCreate(),onStart()这两个方法,当停止Service时,则执行onDestroy()方法,这里需要注意的是,如果Service已经启动了,当我们再次启动Service时,
不会在执行onCreate()方法,而是直接执行onStart()方法

 Service后端的数据最终还是要呈现在前端Activity之上的,因为启动Service时,系统会重新开启一个新的进程,这就涉及到不同进程间通信的问题了(AIDL),

 AIDL是一个IDL语言,它可以生成一段代码,可以使在一个android设备上运行的两个进程使用内部通信进程进行交互。如果你需要在一个进程中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation
="vertical"
android:layout_width
="fill_parent"
android:layout_height
="fill_parent"
>
<TextView
android:id="@+id/text"
android:layout_width
="fill_parent"
android:layout_height
="wrap_content"
android:text
="@string/hello"
/>
<Button
android:id="@+id/startservice"
android:layout_width
="fill_parent"
android:layout_height
="wrap_content"
android:text
="startService"
/>
<Button
android:id="@+id/stopservice"
android:layout_width
="fill_parent"
android:layout_height
="wrap_content"
android:text
="stopService"
/>
<Button
android:id="@+id/bindservice"
android:layout_width
="fill_parent"
android:layout_height
="wrap_content"
android:text
="bindService"
/>
<Button
android:id="@+id/unbindservice"
android:layout_width
="fill_parent"
android:layout_height
="wrap_content"
android:text
="unbindService"
/>
</LinearLayout>

相关文章: