我想阻止應用程序的執行(假設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