访问排行榜
谷歌广告
谷歌广告
魅族手机bindService返回false问题
Author zero | Posted 2019-07-31 09:42:00

摘要(本文所讲重点):

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(疯狂的程序员),绝影大神在等你

个人兴趣网站:zero接码平台

个人兴趣网站:猿指


Comments

comments powered by zero