魅族手机bindService返回false问题

zerochl · · 4300 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

摘要(本文所讲重点):
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(疯狂的程序员),绝影大神在等你


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:zerochl

查看原文:魅族手机bindService返回false问题

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4300 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传