android Service概要

同前一章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发

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值