是否可以在一个线程内运行broadcastReceiver(只是broadcastReceiver)?据我所知,除非有办法保持线程活着(即使很难没有工作),否则无法做到这一点。如果我错了,请纠正我。
这就是我想要做的事情:我有一个客户端和一个服务器程序,在不知道其中任何人何时准备好的情况下运行。客户端将继续尝试向服务器发送请求,同时监视来自服务器的回复。收到服务器的回复后,表示服务器在线。
我曾尝试使用线程(在客户端上)继续向服务器发送定期休眠的请求。然后让客户端主线程执行带有周期性睡眠的while循环(希望在服务器有广播时捕获回复)。不幸的是,这不起作用。
客户端额外线程已经过验证发送请求,服务器已发送回复,但由于某种原因客户端主线程没有收到任何内容。已经验证了服务器和客户端上广播接收器的实现是可行的,所以这不是问题。
对于这个问题,任何人都有更好的解决方案/方法吗?
答案 0 :(得分:0)
据我所知,当客户端主线程处于休眠状态时,它无法从服务器接收广播。所以这里失败了..
可能你可以这样做..我们可以编写custom broadcasts,这样当服务器准备就绪时你就会向客户端发送广播意图..然后客户端broadcastReceiver将启动你需要的线程..你可以以相同的方式向服务器发送请求..
猜猜它可能会有所帮助.. :)
答案 1 :(得分:0)
我通过在客户端使用两个线程(包括主线程)来解决这个问题。创建一个新线程(称之为线程X)以继续从服务器请求服务(带休眠)。保持主线程空闲,不要让它进入休眠状态或执行thread.join()
)。一旦主线程拦截来自服务器的响应,就通知线程X自杀。这样,我们有广播接收器仍然在主线程上运行而没有得到阻塞,我们也有一个不同的线程来继续请求服务器。这种方法的缺点是你的下一个命令(在从服务器获得响应之后)必须从onReceive()
执行。
任何人都有更好的解决方案吗?