魅族手机bindService返回false问题

摘要(本文所讲重点):
1、 应用B未开启应用A如何绑定应用B的Service
2、 魅族手机无法bindService(非设置component解决)

最近在搞进程通信相关的东西,采用的Android提供的Messenger来实现跨进程通信,Messenger底层实现完全类似AIDL,不一样的地方在于AIDL支持多线程,且同步返回,但是我的项目并不需要这些,所以采用使用难度更低的Messenger。
期间遇到的第一个问题是,应用B处于未打开状态,应用A无法启动应用B的Service,据说早期Android是可以的,具体多早呢,不用考虑了,现在7.0,8.0,9.0肯定不支持,也不纠结,因为从安全角度来看的确不能允许这么做,不然大量不死的进程不得耗光手机电池电量才怪,具体怎么解决,很简单,从产品角度,如果应用B处于未开启状态,使用深度连接唤醒页面。
遇到最坑的问题是魅族等部分手机无法绑定Service,简直日了狗啊,从网上google,百度下来都让修改Intent的跳转方式,改为component显示启动的,添加action的,一群人或者一群网站抄来抄去瞎扯淡,也许曾经能解决问题吧,不过现在不行了。
我的解决办法是这样,看码:
```
private boolean bindService() {
        try {
            Intent intent = new Intent();
            intent.setComponent(new ComponentName(ConfigCons.MYKEY_PACKAGE_NAME, ConfigCons.CONNECT_CLASS_PATH));
            context.startService(intent);
            boolean bindResult = context.bindService(intent, connection, Context.BIND_AUTO_CREATE);
            if (!bindResult) {
                LogUtil.e(TAG, "can not bind connect service");
            }
            return bindResult;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
}
```
在bindService之前先调用一下startService激活一下就可以了。看到资料说android8.0可以调用startForgroundService来创建进程,具体也没怎么研究过,有兴趣的可以考虑下。

### Android+GoLang+SprintBoot探讨群:186305789(疯狂的程序员),绝影大神在等你

========Android提供了最新的方式进行service唤醒,请使用最新方式,此方式已经过时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值