2011-10-17 25 views
3

我正在使用MonoDroid Looper.MyQueue().AddIdleHandler()在應用程序處於空閒模式時執行某些命令。這是在一個活動中工作,但如果我開始第二個活動,它會掛起,直到我觸摸屏幕或重新開始第一個活動。 Theres沒有任何循環或任何可能阻止第二個活動隊列的東西。 我怎樣才能防止吊鉤掛?MonoDroid Looper.MyQueue()掛在一些活動/空閒處理程序上?

Looper.MyQueue().AddIdleHandler(new ExecuteRunner(appState)); 
public class ExecuteRunner : Java.Lang.Object, MessageQueue.IIdleHandler 
{ 
    int count = 0; 
    ApplicationState appState; 
    public ExecuteRunner(ApplicationState pAppState) 
    { 
     appState = pAppState; 
    } 

    public bool QueueIdle() 
    { 
     appState.YooManager.Manager.ExecuteCommand(); 
     count++; 
     Android.Util.Log.Debug("YooBik-Exe", count.ToString()); 
     return true; 
    } 
} 

消息隊列是否可以被阻塞?在閒置處理程序不工作的活動中,註冊了OnTouch事件。

還是有人知道另一種方式如何實現monodroid空閒處理程序?

回答

0

不知道它是否會導致您的問題,但您需要ExecuteRunner從Java.Lang.Object繼承並移除您的Handle實現。當系統調用你的Handle方法時,它會拋出未處理的異常並導致你的線程/應用程序死亡。

+0

這樣做。沒有解決我的錯誤。我從來沒有例外,所以我認爲它沒問題。 – andineupert

1

如果它掛起,直到你觸摸屏幕,我想它會等待MessageQueue.next()(line this.wait();)。 由於您的主要活動looper.loop()調用MessageQueue.next()以及它的作用: while(ture){1} pullNextLocked()並返回,如果有某個msg要執行。否則: 2.執行所有queueIdle()。然後 3. this.wait(); < ----------這是它等待的地方。 }

如果按觸摸然後MessageQueue.enqueueMessage(消息< - 觸摸MSG)被調用,執行this.notify(),使第3點是帶來了起死回生再點1和2(你queueIdle ()被執行)

要破解它,你可以發送一些廢話的消息形式的活動它自己會踢MessageQueue.enqueueMessage和MessageQueue.next()循環將被喚醒。

最好的問候, Zbyszek