同前一章BroadcastReceiver一样,在这里不会讲解Service基本用法而只会提一些相对重要的重点
启动Service方式一般是通过方法startService(Intent service)和bindService(Intent service, ServiceConnection conn, int flags)调用从而启动。
在这里就简单介绍这两种方式调用的特点和特性
1.1 Activity第一次通过startService方法启动服务时,服务中的onCreate,onStartCommand方法会被依次调用.即便是调用服务的Activity销毁了,被启动的Service依然在后台运行,除非在Activity销毁之前调用了stopService方法。
1.2 Activity第一次通过bindService方法启动服务时,服务中的onCreate,onBind方法会被依次调用,调用服务的Activity销毁时,被启动的Service也会随之销毁。
1.3针对前两者就能发现他们的差别,有道是不求同时生,但求同时死,正是说的bindService方式启动服务。还有一点,必须在Activity的onStop方法中调用unbindService方法,否则会抛异常has leaked ServiceConnection
1.4通过bindService方法启动服务时,在服务中的onBind方法返回为null时,ServiceConnection 中的onServiceConnected方法则不会调用
1.5服务的绑定与解绑要一一对应,否则会抛异常
1.6通过bindService方式启动的服务,在设置->正在运行的进程中看不到,可以理解为一个隐形的服务
两种调用服务的混合搭配方案
2.1先调用startService方法开启服务,能够保证服务在后台长期运行
2.2调用bindService方法,可以获得中间对象Binder,这样就可以使调用者调用到服务内的方法。
2.3调用unbindService解绑服务,服务并不会销毁
2.4调用stopService销毁服务
说到Service,这里再引申另外一个话题就是aidl(进程间通信),对于android中aidl的定义网上大把的资料,用法也能找到经典的demo,我这里只是用自己的表达方式概述一下。
问:为什么会要有aidl,经典的实例场景是怎样的?
答:像我们所熟知的,微信,支付宝等这些支付软件都带有各自的支付接口,如果第三方应用软件,需要调用他们的接口时,就得通过进程间通信方式打开支付窗口进行扫码支付,等等!
我这里就简单的介绍一下aidi在android studio 开发工具中开发的过程(我这里强调了是在android studio中,而不是eclipse,因为这两种IDE修改的方式不一样,然后随着android studio 3.0发