service启动activity同时需要得到activity里的某个对象实现方法

本人android小菜鸟一只,最近因为某一个顽强的大boss bug困扰鄙人2天之久。

其根本问题就是startactivity的启动过程是放在一个ui线程里面执行的。

所以,当我在service里面startactivity,然后在service里面调用activity里面的某个getHandler方法之时,发现获取到的hanler是空。

经过调查才明白,startactivity是把activity的onCreate方法放到一个线程里面执行,所以我是先获取到了handler为空然后才执行的onCreate方法。

后经过高人指点,在service里面启动Activity以后,

在Activity的onCreate方法里面绑定这个Service,

然后就可以在Activity里面获取这个服务对象了,

然后在service里面写个方法setHandler,

Activity里面调用service对象的setHandler方法并把handler传进去在Service里面,

写个继承Binder类的内部类,然后内部类里面写个方法返回这个service对象,

然后在service的onBind方法里面返回这个内部类对象,。

这样,在Acitivty里面就可以获得这个service的内部类对象了,然后直接调用就可以。

这样的话,整个的流程就是:

service先startactivity,然后在onCreate方法里面绑定服务,得到内部类对象,getservice,得到service对象,sethandler,把handler传过去,然后再在service里面通过handler执行activity里的方法。

需要注意的是,handler和conn不能再onCreate里面初始化,要放到外面。下面:贴图




这个是service里面的内部类。

创建的内部类对象。

返回的内部类对象。

sethandler方法。

handler里面的使用

这是activity里面的onCreate方法和绑定服务的conn,记住要写在onCreate外面。



handler的创建也要写在外面。


在create方法里面设置handler进去。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值