day08_服务
来源:互联网 发布:淘宝收到货后怎么评价 编辑:程序博客网 时间:2024/05/16 18:25
服务
服务的生命周期、调用服务里的方法
服务的生命周期
1 start开启服务的生命周期(重点)
- 完整生命周期: onCreate()–>onStartCommand()–>onDestroy()
- 开启服务: onCreate()–>onStartCommand()
停止服务:onDestroy()
特点:
1. 服务长期运行在后台
2. 服务可以被多次开启,每次都执行onStartCommand()
3. 服务只能被停止一次,多次停止无效
2 bind绑定服务的生命周期(重点)
完整生命周期:onCreate()–>onBind()–>onUnBind()–>onDestroy()
绑定服务:onCreate()–>onBind()
解绑服务:onUnBind()–>onDestroy()
特点:
- 不能长期运行在后台,不是一个服务进程
- 服务只能被绑定一次
- 服务只能被解绑一次,多次解绑抛出异常
- 调用服务的方法
- activity和绑定的service是同生共死
区别:
- 能不能长期运行在后台
- 能不能调用服务里的方法
绑定服务调用方法
3 绑定服务调用服务里的方法
绑定服务
Intent service = new Intent(this,MyService.class);bindService(service, new MyConn(), BIND_AUTO_CREATE);
服务被绑定成功
@Overridepublic IBinder onBind(Intent intent) { Log.e(TAG, "2. 服务被绑定成功"); Log.e(TAG, "3. 返回服务里内部类的对象"); return new MoMiShu();}
返回服务里内部类的对象
public class MoMiShu extends Binder { public void banZheng(int money) { if (money > 1000) { methodInService(); } else { Toast.makeText(MyService.this, "没钱不给办,写几年代码吧", 0).show(); } }}
连接成功后
@Overridepublic void onServiceConnected(ComponentName name, IBinder service) { Log.i(TAG, "4. activity和service连接成功"); }
把IBinder强转成服务里的内部类对象
mService = (MoMiShu) service;
拿服务里的内部类间接调用服务里的方法
mService.banZheng(100000000);
4 绑定服务抽取接口(重点)
- 写一个接口,写一个要爆了的方法
- 让服务里的内部类实现这个接口,重写接口里的方法
- 在连接成功后,把IBinder强转成接口类型
- 调接口里的方法,实际上调用的时接口实现类即服务里的内部类里的方法
5 混合方式开启服务
应用场景:即想服务长期运行在后台,又想调用服务里的方法
推荐步骤
- startService
- bindService
- unBindService
- stopService
远程服务
6 本地服务和远程服务
- 本地服务:服务组件在自己的应用程序里
- 远程服务:服务组件不不不在自己的应用程序里
7 本地应用调用远程服务中的方法(重点)
- IPC :进程间通讯机制
AIDL:安卓接口定义语言
编写步骤:
05远程应用: 1. 把接口文件改成.aidl文件 2. 去掉这个.aidl文件里的权限修饰符public,开发工具会在gen目录下生成一个同名的.java文件 3. 让远程服务里的内部类继承Stub类06本地应用: 4. 创建一个和远程应用里.aidl文件所在的包名一样的包 5. 把远程应用里的.aidl文件复制到这个包里 6. Stub.asInterface(service)强转成05远程应用里的接口 7. 拿着这个接口间接的调用远程服务里的方法
8 远程服务的使用场景
- 阅读Android操作系统的源码
- 手机系统的服务
- 超级大公司写远程服务供其他程序员调用
阅读全文
0 0
- day08_服务
- Day08_数组
- 黑马程序员_Java基础Day08_面向对象之多态(Done)
- 服务
- 服务
- 服务
- 服务
- 服务
- 服务
- 服务
- 服务
- 服务
- 服务
- 【服务】
- 服务
- 服务
- 服务
- 服务
- 深到骨子里的自律,是每周坚持刷几篇最新论文 | PaperDaily #10
- day07_广播与服务
- 【OpenCV】傅里叶变换
- 软件工程第七次实验
- CVX介绍——基础篇
- day08_服务
- 使用java容器(集合类)模拟商城
- day09_内容提供者
- java二维数组 初始化及使用其长度 &&二维数组中的查找 [转载]
- 从汇编看c语言函数调用
- JUnit4的入口类
- 服务计算作业4——cloudgo(基本要求)
- mysql组合更新
- Android OpenGL教程-第二课【转】