##01_start开启服务的生命周期(重点)
1.开启服务时调用的生命周期的方法:onCreate,onStartCommand;
2.停止服务时调用的生命周期的方法:onDestroy;
没有onResume,onPause,onStop,onRestart方法,因为服务没有界面;
##02_bind方式开启服务的生命周期(重点)
特点:
1.在第一次绑定服务时,先创建服务对象,调用的方法有onCreate,然后再绑定服务,调用的方法是onBind;
2.服务只能被绑定一次,如果绑定多次,不会执行任何操作;
3.解除绑定的服务时,先解除绑定,调用的方式是onUnbind,然后再销毁服务的实例对象,调用了onDestroy方法;
4.服务只能被解除绑定一次,如果多次解除绑定会抛出异常;
5.当界面关闭时,服务就会被解除绑定;
生命周期:
1.绑定服务时:onCreate,onBind;
2.解除绑定的服务时:onUnbind,onDestroy;
推荐使用的混合方式:
1.startService():让服务长期运行在后台;
2.bindService():为了调用服务中的业务逻辑方法;
3.unbindService():解除绑定的服务,目的是不在调用服务中的业务逻辑方法;
4.stopService():停止服务,销毁服务对象;
##03_为什么要引入bindservice的API
目的是为调用服务中的业务逻辑方法;
##04_绑定服务调用服务方法的过程
1.在服务中创建一个中间人的角色,在中间人里面写一个方法,在这个方法中调用服务的业务逻辑方法;
2.activity绑定服务成功时,让服务给activity返回中间人对象;
3.在activity中得到中间人对象,在调用中间人的方法,从而达到间接调用服务中业务逻辑方法的目的;
##05_绑定服务抽取接口(重点)
接口的作用:对外暴露功能,隐藏实现的细节;
1.在服务中写了3个业务逻辑方法:methodInService(),methodInEat(),methodInKtv();
2.写一个接口,里面写2个方法:methodInMyBinder,eatInMyBinder;
3.在服务中让MyBinder实现IService接口,并且实现接口中的两个方法,在这两个方法中分别调用服务中的业务方法;这样MyBinder一身兼两职,即是IBinder接口类型的对象,又是IService接口类型的对象;
##06_服务的应用场景
应用场景:天气预报,股票软件,音乐播放器;
应用场景:当用户提交数据失败时,应该把数据保存到本地的sqlite数据库中;写一个服务的程序,检测手机网络信号是否健康,当网络信号健康时,应该从数据库读取用户提交失败的数据,然后访问网络发送给服务器端;
##07_利用服务注册广播接收者
操作频繁的广播接收者在清单文件中注册是无效的,如:锁频,解屏;
在代码中注册广播接收者:
// 代码中注册广播接收者
// 1.创建广播接收者对象
receiver = new ScreenBroadcastReceiver();
// 2.创建IntentFilter对象
IntentFilter filter = new IntentFilter();
// 3.在filter中添加两个action
filter.addAction("android.intent.action.SCREEN_ON");
filter.addAction("android.intent.action.SCREEN_OFF");
// 4.注册广播接收者
registerReceiver(receiver, filter);
##08_远程服务aidl的写法(重点)
调用远程服务中的方法;
写两个过程:本地应用程序,远程服务(装在同一个手机上的另外一个软件,里面有一个service,service中有一个业务逻辑方法);
在本地应用程序中调用远程服务中的方法;
aidl: Android interface defination language 安卓接口定义语言;
aidl文件是一个可以对外共享,可以拷贝到其他工程中使用;
IPC: inter process communication 进程间的通讯;
修改的步骤:
1.修改了IService.java文件的扩展名IService.aidl;
2.在IService.aidl文件中去掉了两个public;
3.在RemoteService中让中间人继承了Stub;
4.在本地应用的工程中创建一个与远程服务工程一样的包名(IService.aidl所在的包);
5.把IService.aidl拷贝到本地应用的工程中,放在新建的包中;
6.在本地应用工程得到远程服务返回的中间人对象;
IService myBinder = Stub.asInterface(service);
7.调用中间人对象的方法;
1.开启服务时调用的生命周期的方法:onCreate,onStartCommand;
2.停止服务时调用的生命周期的方法:onDestroy;
没有onResume,onPause,onStop,onRestart方法,因为服务没有界面;
##02_bind方式开启服务的生命周期(重点)
特点:
1.在第一次绑定服务时,先创建服务对象,调用的方法有onCreate,然后再绑定服务,调用的方法是onBind;
2.服务只能被绑定一次,如果绑定多次,不会执行任何操作;
3.解除绑定的服务时,先解除绑定,调用的方式是onUnbind,然后再销毁服务的实例对象,调用了onDestroy方法;
4.服务只能被解除绑定一次,如果多次解除绑定会抛出异常;
5.当界面关闭时,服务就会被解除绑定;
生命周期:
1.绑定服务时:onCreate,onBind;
2.解除绑定的服务时:onUnbind,onDestroy;
推荐使用的混合方式:
1.startService():让服务长期运行在后台;
2.bindService():为了调用服务中的业务逻辑方法;
3.unbindService():解除绑定的服务,目的是不在调用服务中的业务逻辑方法;
4.stopService():停止服务,销毁服务对象;
##03_为什么要引入bindservice的API
目的是为调用服务中的业务逻辑方法;
##04_绑定服务调用服务方法的过程
1.在服务中创建一个中间人的角色,在中间人里面写一个方法,在这个方法中调用服务的业务逻辑方法;
2.activity绑定服务成功时,让服务给activity返回中间人对象;
3.在activity中得到中间人对象,在调用中间人的方法,从而达到间接调用服务中业务逻辑方法的目的;
##05_绑定服务抽取接口(重点)
接口的作用:对外暴露功能,隐藏实现的细节;
1.在服务中写了3个业务逻辑方法:methodInService(),methodInEat(),methodInKtv();
2.写一个接口,里面写2个方法:methodInMyBinder,eatInMyBinder;
3.在服务中让MyBinder实现IService接口,并且实现接口中的两个方法,在这两个方法中分别调用服务中的业务方法;这样MyBinder一身兼两职,即是IBinder接口类型的对象,又是IService接口类型的对象;
##06_服务的应用场景
应用场景:天气预报,股票软件,音乐播放器;
应用场景:当用户提交数据失败时,应该把数据保存到本地的sqlite数据库中;写一个服务的程序,检测手机网络信号是否健康,当网络信号健康时,应该从数据库读取用户提交失败的数据,然后访问网络发送给服务器端;
##07_利用服务注册广播接收者
操作频繁的广播接收者在清单文件中注册是无效的,如:锁频,解屏;
在代码中注册广播接收者:
// 代码中注册广播接收者
// 1.创建广播接收者对象
receiver = new ScreenBroadcastReceiver();
// 2.创建IntentFilter对象
IntentFilter filter = new IntentFilter();
// 3.在filter中添加两个action
filter.addAction("android.intent.action.SCREEN_ON");
filter.addAction("android.intent.action.SCREEN_OFF");
// 4.注册广播接收者
registerReceiver(receiver, filter);
##08_远程服务aidl的写法(重点)
调用远程服务中的方法;
写两个过程:本地应用程序,远程服务(装在同一个手机上的另外一个软件,里面有一个service,service中有一个业务逻辑方法);
在本地应用程序中调用远程服务中的方法;
aidl: Android interface defination language 安卓接口定义语言;
aidl文件是一个可以对外共享,可以拷贝到其他工程中使用;
IPC: inter process communication 进程间的通讯;
修改的步骤:
1.修改了IService.java文件的扩展名IService.aidl;
2.在IService.aidl文件中去掉了两个public;
3.在RemoteService中让中间人继承了Stub;
4.在本地应用的工程中创建一个与远程服务工程一样的包名(IService.aidl所在的包);
5.把IService.aidl拷贝到本地应用的工程中,放在新建的包中;
6.在本地应用工程得到远程服务返回的中间人对象;
IService myBinder = Stub.asInterface(service);
7.调用中间人对象的方法;