Binder 讣告应用于进程守护

阅读: 评论:0

Binder 讣告应用于进程守护

Binder 讣告应用于进程守护

Binder 应用于C/S通信中,有时候Server可能需要知道Client进程是否存在,当Client挂掉后,Server可以及时清理资源。
利用这种机制,同样可以实现简单的程序守护,当Client崩溃后,Server帮助重启Client程序。

守护程序

守护程序开放一个Service,提供给被守护程序调用

  • AIDL
ample.guardapp;
import android.os.IBinder;interface IGuardService {void attachBinder(IBinder token);
}
  • Service
public class GuardService extends Service {private static final String TAG = "GuardService";private static final String MAIN_APP_PACKAGE = &#ample.mainapplciation";private static final String MAIN_MAIN_ACTIVITY = &#ample.mainapplciation.MainActivity";private IGuardService.Stub mStub = new IGuardService.Stub() {@Overridepublic void attachBinder(IBinder token) throws RemoteException {//客户端注册死亡讣告token.linkToDeath(recipient, 0);}};private IBinder.DeathRecipient recipient = new IBinder.DeathRecipient() {@Overridepublic void binderDied() {//侦听到客户端死亡,重启客户端主程序restartMainApp();}};private void restartMainApp() {Intent intent = new Intent(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_LAUNCHER);ComponentName cn = new ComponentName(MAIN_APP_PACKAGE, MAIN_MAIN_ACTIVITY);intent.setComponent(cn);intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(intent);}@Overridepublic IBinder onBind(Intent intent) {return mStub;}
}

被守护程序

主程序即被守护程序,只要调用远程的GuardService接口即可。

//客户端Binder
private Binder mBinder = new Binder();
private ServiceConnection mConnection = new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {IGuardService guardService = IGuardService.Stub.asInterface(service);try {guardService.attachBinder(mBinder);} catch (RemoteException e) {e.printStackTrace();}}@Overridepublic void onServiceDisconnected(ComponentName name) {}
};private void bindGuardService() {Intent intent = new Intent();intent.setPackage(GUARD_APP_PACKAGE);intent.setAction(GUARD_SERVICE_ACTION);bindService(intent, mConnection, BIND_AUTO_CREATE);}

测试

使用adb kill 杀掉主程序,观察主程序是否重启。

示例

查看demo

本文发布于:2024-02-01 22:05:06,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170679630539714.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:讣告   应用于   进程   Binder
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23