Android - 一个线程内的BroadcastReceiver

时间:2010-08-28 02:05:24

标签: java android

是否可以在一个线程内运行broadcastReceiver(只是broadcastReceiver)?据我所知,除非有办法保持线程活着(即使很难没有工作),否则无法做到这一点。如果我错了,请纠正我。

这就是我想要做的事情:我有一个客户端和一个服务器程序,在不知道其中任何人何时准备好的情况下运行。客户端将继续尝试向服务器发送请求,同时监视来自服务器的回复。收到服务器的回复后,表示服务器在线。

我曾尝试使用线程(在客户端上)继续向服务器发送定期休眠的请求。然后让客户端主线程执行带有周期性睡眠的while循环(希望在服务器有广播时捕获回复)。不幸的是,这不起作用。

客户端额外线程已经过验证发送请求,服务器已发送回复,但由于某种原因客户端主线程没有收到任何内容。已经验证了服务器和客户端上广播接收器的实现是可行的,所以这不是问题。

对于这个问题,任何人都有更好的解决方案/方法吗?

2 个答案:

答案 0 :(得分:0)

据我所知,当客户端主线程处于休眠状态时,它无法从服务器接收广播。所以这里失败了..

可能你可以这样做..我们可以编写custom broadcasts,这样当服务器准备就绪时你就会向客户端发送广播意图..然后客户端broadcastReceiver将启动你需要的线程..你可以以相同的方式向服务器发送请求..

猜猜它可能会有所帮助.. :)

答案 1 :(得分:0)

我通过在客户端使用两个线程(包括主线程)来解决这个问题。创建一个新线程(称之为线程X)以继续从服务器请求服务(带休眠)。保持主线程空闲,不要让它进入休眠状态或执行thread.join())。一旦主线程拦截来自服务器的响应,就通知线程X自杀。这样,我们有广播接收器仍然在主线程上运行而没有得到阻塞,我们也有一个不同的线程来继续请求服务器。这种方法的缺点是你的下一个命令(在从服务器获得响应之后)必须从onReceive()执行。

任何人都有更好的解决方案吗?