当前位置: 首页 > news >正文

中心网站建设方法天津搜索引擎推广

中心网站建设方法,天津搜索引擎推广,手机商城+手机网站建设多少钱,建设企业网站公司机构官网项目开发遇到下面这个报错了! 问题原因 直接说原因,就是因为进程间不能直接传递对象,应该传递该Binder对象的映射(代理对象),所以类型转换就出错了。如果在同一个进程中,直接传递对象没有关系&a…

        项目开发遇到下面这个报错了!

问题原因

        直接说原因,就是因为进程间不能直接传递对象,应该传递该Binder对象的映射(代理对象),所以类型转换就出错了。如果在同一个进程中,直接传递对象没有关系,下面的类型强转是没有问题的,但是如果是不同进程,强转就会失败,就会报上面的错误。

        那启动应用内启动service怎么就成进程间通信了呢?因为service是指定了android:process=":remote"。就算自己的service没有指定android:process,如果应用中其他service写了android:process,也会导致自己的service报错。

        我的Service是一个websocket通信服务,本来我把bindService写在Activity中,但是这有一个问题,就是页面跳转,服务会随着声明周期被销毁重建,这样每次跳转页面都重新连接,浪费时间,于是我就把Service挪到了Application里面。我的页面一个LoginActivity,一个MainActivity,页面跳转到MainActivity的时候就报错了,因为我的MainActivity里面使用了百度地图,而百度地图的service如下

<!--        百度地图定位的service组件--><service android:name="com.baidu.location.f"android:enabled="true"android:process=":remote"/>

这样就导致我的Service的binder转换报错了。把百度地图Service里面的android:process=":remote"去掉就就可以了。

解决办法

一.去掉android:process=":remote"
二.aidl方式

        下面记录一下,进程间Service要想解决这个问题,就是需要用aidl方式。

1.创建aidl文件

        Android Studio可以直接创建,在与java文件平级的文件下会创建一个aidl文件夹,里面包名是app的包名,创建一个后缀为.aidl的文件夹

创建之后是这样的

aidl文件如下:

// IMyAidlInterface.aidl
package com.deviser.androidremote;// Declare any non-default types here with import statementsinterface IMyAidlInterface {//这用来传递Service的包名和文件名,传递之后通过反射获取Service对象String getName();
}

编译之后,build下面会生成

2.重写Service的Binder方法
//    //用于Activity和service通讯//这是原来的方法,直接把WebClientService这个对象返回了
//    public class WebClientBinder extends Binder {
//        public WebClientService getService() {
//            return WebClientService.this;
//        }
//    }//通过aidl方式,继承IMyAidlInterface.Stub,返回的是WebClientService的包名和文件名//进程间传递的是字符串public class WebClientBinder extends IMyAidlInterface.Stub{@Overridepublic String getName() throws RemoteException {return WebClientService.class.getName();}}
3.修改onServiceConnected
    private var webServiceConnection: ServiceConnection = object : ServiceConnection {override fun onServiceConnected(componentName: ComponentName?, iBinder: IBinder?) {//原来就是这里iBinder强转成WebClientService.WebClientBinder报错
//            var binder: WebClientService.WebClientBinder = iBinder as WebClientService.WebClientBinder
//            webClientService = binder.service// 获得代理对象var proxy = IMyAidlInterface.Stub.asInterface(iBinder)try {//通过反射机制,把字符串转换成对象WebClientService对象var clazz = Class.forName(proxy.name)webClientService = clazz.newInstance() as WebClientService?}catch (e: Exception){e.printStackTrace()}}override fun onServiceDisconnected(componentName: ComponentName?) {Log.e(MyConstant.TAG,"服务与活动成功断开");}}

到这里,问题就解决啦!

http://www.shuangfujiaoyu.com/news/52847.html

相关文章:

  • 做帖子网站重庆关键词自动排名
  • 日文网站建设永久观看不收费的直播
  • 建一个电商网站多少钱微信怎么推广引流客户
  • 武汉建商城网站怎么seo快速排名
  • 自己做的网站怎样做网站推广啊
  • 保健品 网站模板bing收录提交
  • 国开行网站毕业申请怎么做湖南长沙seo
  • 做网站云服务器装系统口碑营销的产品有哪些
  • 游戏开发软件有哪些seo页面优化公司
  • 网页设计网站模板素材网站优化入门免费教程
  • 企业建站系统还有没有前景可言济南网络推广公司
  • 做网站应该注意哪些方面深圳网站建设优化
  • ae做网站导航云搜索引擎
  • 宁波市城市建设档案馆网站外贸网站建设推广
  • 邯郸网站建设安联网络nb短视频推广平台
  • 建网站的意义网络营销常见术语
  • 手机网站制作推荐建站平台有哪些
  • flash做网站轮播图在线优化网站
  • 我网站关键词太多西安网站制作费用
  • 房地产网站制作长沙seo优化首选
  • 做网站microsoft东莞网站推广大全
  • 做建材外贸哪个网站比较好app运营需要做哪些
  • 做网站广告哪家好收录好的网站有哪些
  • 找人做一下网站大概多少钱百度关键词首页排名
  • 更换wordpress后台域名怎么提高seo关键词排名
  • 越秀高端网站建设网站seo推广哪家值得信赖
  • 自己注册个公司做网站怎么样怎么自己注册网站平台了
  • 怎么在网站做系统seo排名哪家有名
  • 网站怎么搜怎么开个人网站
  • 哪个网站有律师做的案件免费网站制作教程