安卓基础干货(八):安卓进程的学习 (2)

生命周期的方法:

onCreate:服务被创建的时候调用这个方法; onStartCommand :开启服务 onDestroy:销毁服务

bind方式开启服务的生命周期(重点) bindService绑定服务、unBindService解除绑定的服务; 服务是在被绑定的时候被创建,调用oncreate、onbind方法; 服务只能被绑定一次; 服务只能被解除一次,接触绑定的时候调用onUnbind、onDestrory方法,如果多次解除绑定会抛出异常;

推荐的方式:

startService:开启并创建一个服务,服务长期运行在后台; bindService:绑定服务,可以调用服务里面的方法; unBindService:解除服务,停止服务里面的方法; stopService:停止服务,销毁服务对象; 为什么要引入bindservice的API

为了调用服务中的业务逻辑方法。

绑定服务调用服务方法的过程

通过bindservice方式实现调用服务里面业务逻辑方法:

步骤:

1、在服务类中创建一个中间人MyBinder,继承了Binder,Binder实现了IBinder接口: public class MyBinder extends Binder{ } 2、在服务类里面创建了一个MyBinder的成员变量: private MyBinder myBinder; 3、在MyBinder类中写一个方法用于调用服务的业务逻辑方法: public class MyBinder extends Binder{ //使用中间人调用服务里的方法 public void callMethodInService(){ methodInService(); } } 4、在activity中bindService时,定义了ServiceConnection,在这个连接中实现了两个: private class MyConn implements ServiceConnection { /** * 服务连接成功时调用这个方法 */ @Override public void onServiceConnected(ComponentName name, IBinder service) { //得到服务绑定成功后返回的中间人MyBinder对象 myBinder = (MyBinder) service; } /** * 服务断开成功时调用这个方法 */ @Override public void onServiceDisconnected(ComponentName name) { System.out.println("-------onServiceDisconnected-------"); } } 5、通过在activity中通过中间人条用服务的业务逻辑方法: myBinder.callMethodInService(); 绑定服务抽取接口(重点)

接口(interface): 对外开放暴露的功能,但是不会暴露功能实现的细节;
让中间人实现服务接口的目的:只对外暴露接口里面业务逻辑方法,隐藏中间人里面的其他方法;

步骤: 1、创建一个服务的接口类,里面包含需要对外暴露的业务逻辑方法: public interface IService { public void callMethodInService(); } 2、让服务中的中间人实现了服务的接口类: private class MyBinder extends Binder implements IService{ //(实现服务接口中的方法)使用中间人调用服务里的方法 public void callMethodInService(){ methodInService(); } } 3、在activity中声明接口的成员变量: private IService myBinder; 4、强制转换成服务的接口类型 private class MyConn implements ServiceConnection { /** * 服务连接成功时调用这个方法 */ @Override public void onServiceConnected(ComponentName name, IBinder service) { //强制转换成服务的接口类型 myBinder = (IService) service; } 5、在activity中通过接口的成员变量调用服务的业务逻辑方法: public void call(View view){ myBinder.callMethodInService(); } 绑定服务的应用场景

应用场景:

1、需要在后台运行一定的业务逻辑,而且需要与服务器端交互数据,都是写在服务里面的。

2、天气预报、股票行情软件;

利用服务注册广播接收者

操作频繁的广播事件,如果只是在清单配置文件配置,是不生效的。需要使用代码注册才能生效;

步骤: // 注册广播接收者 // 1、得到广播接收者的对象 ScreenBroadCastReceiver screenReceiver = new ScreenBroadCastReceiver(); // 2、创建一个intentFilter对象 IntentFilter filter = new IntentFilter(); // 3、注册接收的事件类型 filter.addAction("android.intent.action.SCREEN_ON"); filter.addAction("android.intent.action.SCREEN_OFF"); // 4、注册广播接收者 this.registerReceiver(screenReceiver, filter); 远程服务aidl的写法(重点)

本地服务:写在自己的应用程序的工程里的服务 ,使用自己应用程序的进程运行这个服务;

远程服务:写在别的应用程序的工程里的服务,使用别的应用程序的进程运行这个服务(安装在同一个手机上的应用程序);

IPC: Inter Process Communication(进程间的通讯);

aidl: Android Interface definition language 安卓接口定义语言;

aidl的接口类里面不需要public 、protected、private 等修饰符,默认是公开共享;

步骤: 1、创建一个服务的接口类,里面包含需要对外暴露的业务逻辑方法: 2、让服务中的中间人实现了服务的接口类: 3、修改并拷贝接口文件: 4、在本地服务的工程中的activity里,绑定服务: 5、通过接口调用远程服务的方法:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyzzxx.html