我想阻止应用程序的执行(假设A),直到另一个应用程序(让我们说B)发送一个意图。我知道阻塞无限循环的线程并不好,但为了安全起见,我确实需要保证在收到Intent之前不会执行A的代码。在阻止应用程序A之前,我使用Intent启动另一个应用程序B.这样,应用程序A将有机会生存直到B完成。为此,我目前正在写了一个阻塞循环,例如:如何阻止主Android线程,直到收到一个意图?
context.startActivity(message); // starting app B
// Blocking A
while (condition) // waits an authorization from B
{
Thread.sleep(5000);
// some checks can be done here to modify the condition evaluation
// for example, check the Intents received from B
}
// (Secured zone)
// Some code that should not be executed before that the condition is true
我尝试了很多解决方案,以检查意向接待:
- 使用
broadcastreceiver
是不可能的,因为主线程会从来没有机会处理收到的Intent - 使用绑定服务到另一个应用程序来获取信息:再次,
onConnectedService
方法将不会被调用,因为主线程不会处理该事件。 - 使用第二个独立进程将被通知传入的意图:这很好。第二个进程被通知,但它不能通知主线程发生了什么事情!
- 使用第二个线程来检查接收到的Intent,绑定服务到B:没办法,第二个线程不负责处理消息。
也许我缺少一个简单的解决方案,但我开始想,我试图做一些事情,与Android的理念真的很矛盾......
编辑:另一个限制是“安全区”部分代码无法在我的程序中的其他位置移动...
你怎么知道何时收到意向..? – ngesh 2012-03-30 08:14:47
我想你应该找到另一种防止你的代码被运行的方法。锁定主线程,用户交互以及因为系统很可能认为活动被冻结并询问用户他/她是否想要关闭活动永远不是一个好主意。 – Jave 2012-03-30 08:16:30
例如,我可以使用BroadcastReceiver捕获Intent,它在第二个进程中执行onReceive方法,如果我放入清单中: –
JFL
2012-03-30 08:41:57