Android中如何把在broadcastreceiver中耗时的任务交给service处理

demondeviljet 2014-11-03 01:21:05
如题。在broadcastreceiver中的onReceive方法需要接受一些数据并上传到服务器,这个操作可能会比较耗时,BroadcastReceiver在10秒内没有执行完毕,Android会认为该程序无响应,如果需要完成一项比较耗时的工作,应该通过发送Intent给Service,由Service来完成。这个service需要接收从broadcastreceiver传过来的数据。
这个如何实现呢?直接statService启动服务无法接收数据,如果用BindService的话,当broadcastreceiver同时多次被触发的时候怎么办?
...全文
965 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
izen 2016-12-06
  • 打赏
  • 举报
回复
在onReceive通常是不能开启线程的,因为onReceive随时都可能会被杀掉。一般是通过service来处理。
SouthMa 2014-11-03
  • 打赏
  • 举报
回复
正想说用intentservice,封装了异步功能,其实和启动线程差不多
demondeviljet 2014-11-03
  • 打赏
  • 举报
回复
引用 6 楼 svenwang 的回复:
[quote=引用 5 楼 qiulongjiemajianyun 的回复:] [quote=引用 3 楼 svenwang 的回复:] 不一定需要在onReceive里启动线程,可以事先启动好,在onReceive把数据通过消息发送给这个线程去上传。
如何在onReceive里把数据传到service里,然后调用service的方法[/quote] 不是service,你直接用Handler的sendMessage把数据发到线程里处理就可以。[/quote] 我用IntentService解决了
zdd2389 2014-11-03
  • 打赏
  • 举报
回复
service一样不能处理耗时的事件,还不如直接在onReceive里面启动一个新的线程。
svenwang 2014-11-03
  • 打赏
  • 举报
回复
不一定需要在onReceive里启动线程,可以事先启动好,在onReceive把数据通过消息发送给这个线程去上传。
svenwang 2014-11-03
  • 打赏
  • 举报
回复
引用 5 楼 qiulongjiemajianyun 的回复:
[quote=引用 3 楼 svenwang 的回复:] 不一定需要在onReceive里启动线程,可以事先启动好,在onReceive把数据通过消息发送给这个线程去上传。
如何在onReceive里把数据传到service里,然后调用service的方法[/quote] 不是service,你直接用Handler的sendMessage把数据发到线程里处理就可以。
demondeviljet 2014-11-03
  • 打赏
  • 举报
回复
引用 3 楼 svenwang 的回复:
不一定需要在onReceive里启动线程,可以事先启动好,在onReceive把数据通过消息发送给这个线程去上传。
如何在onReceive里把数据传到service里,然后调用service的方法
Birds2018 2014-11-03
  • 打赏
  • 举报
回复
onReceive 里面不能做耗时的事情,一般是把数据处理提交给线程处理,不建议在Receive里面启动线程。 可以在Service里面开启线程,让线程来处理数据上传问题。
svenwang 2014-11-03
  • 打赏
  • 举报
回复
你说“如果需要完成一项比较耗时的工作,应该通过发送Intent给Service,由Service来完成”,这句话是错误的。service和是否耗时的工作没有直接关系。 从你的需求来看,你需要的是在onReceive里启动一个线程去做上传数据的工作。

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧