我正在使用monodroidLooper.MyQueue().AddIdleHandler()在应用程序处于空闲模式时执行一些命令。这在一个活动中有效,但是如果我开始第二个活动,它将挂起,直到我触摸屏幕或重新启动第一个活动。在第二个活动中没有循环或任何可能阻塞队列的内容。
如何防止活套挂起?

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事件。
或者有人知道另一种方法如何实现单机器人的空闲处理程序吗?

最佳答案

如果它一直挂在触摸屏上,我猜它会等待messagequeue.next()(this.wait();)。
因为您的主要活动looper.loop()调用了MessageQueue.next()以及它的作用:
当{
1。pullNextLocked()并返回是否有要执行的消息。否则:
2。执行所有queueIdle(),然后
三。this.wait();}
如果按touch,则会调用MessageQueue.EnqueueMessage(message要破解它,可以从活动中发送一些无意义的消息给它自己,它将踢出MessageQueue.EnQueueMessage,然后将唤醒MessageQueue.Next()循环。
谨致问候,
泽比谢克

08-17 15:43