美文网首页
Binder 基础使用细则

Binder 基础使用细则

作者: zbiext | 来源:发表于2019-08-09 20:18 被阅读0次

    魅族手机aidl服务绑定失败问题

    ref:
    解决办法1
    解决办法2
    解决办法3

    这类问题网上的博文都有,第一篇中说的startService(intent)解决问题的关键,奇葩的魅族手机。

    要点(我的理解)

    1. 针对其他手机,在Android 5.0以后的使用隐式Intent进行bindService前,需要调用intent.setPackage("要启动的service的应用包名),绑定服务的代码参考如下:
      private void bindService() {
          Intent intent = new Intent();
          intent.setAction("com.github.zbiext.aidlservicedemo.AIDLService"); // AIDL服务类注册的action值
          intent.setPackage("com.github.zbiext.aidlservicedemo"); // Android 5.0以后 
          bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
      }
      
    2. 针对魅族手机,隐式Intent可能存在风险,针对Intent传值,厂商一般可能修改底层代码,如上面代码在魅族手机是不生效的,导致绑定失败,需要使用ComponentName对象,而且在bindService调用之前,调用startService(intent),具体代码如下:
      private void bindService() {
          Intent intent = new Intent();
          intent.setComponent(new ComponentName("com.github.zbiext.aidlservicedemo", "com.github.zbiext.aidlservicedemo.AIDLService")); // 包名 AIDL服务类名
          startService(intent);
          bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
      }
      

    Binder机制 —— Android系统跨进程间通信(IPC)方式之一

    应用场景:

    1. 微博、微信 oauth2.0 第三方验证登录;
    2. 移动支付,WXPay、AliPay;
    3. 进程(不同App)间的数据通讯、交互,用户信息共享(安全问题)、token共享、密钥共享;
    4. 系统下载任务器;

    前提条件: AIDL绑定的Service组件必须启动,并长时间保活在内存中
    ps: 回顾 进程等级(5个)
    foreground process(前台进程)
    visible process(可视进程)
    service process(服务进程)
    background process(后台进程)
    empty process(空进程)

    后续再更 binder连接池、aidl语法需要注意的地方以及binder的DeathRecipient、远程断开API

    相关文章

      网友评论

          本文标题:Binder 基础使用细则

          本文链接:https://www.haomeiwen.com/subject/dzrkjctx.html