Android处理程序/计时器请求

时间:2017-08-12 22:36:59

标签: android handler timertask

所以我有一个问题,如果它是一个愚蠢的我在前面道歉,我试图搜索它但不确定要搜索到什么。我正在尝试运行一个延迟的任务,但只有当我的int = 0时,这是否会像我想要的那样正常工作?

public static void runTask(String p)
{
     Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run()
            {
                pendingRequest = pendingRequest - 1;
                if (pendingRequest == 0)
                {
                        context.startActivity(p);
                }
            }
        }, 4000);
    }

}

我想要它只是在pendingRequest为0时运行,但是在调用runTask()之后我还有其他活动添加到挂起请求中。如果这没有任何意义,请告诉我,我会尝试改写它。

2 个答案:

答案 0 :(得分:0)

这是一种不明确的做事方式,因此只看到这个片段我无法准确说出所需的行为是什么,但是,如果你制作参数" p"最后。我也不熟悉一个带字符串而不是意图的startActivity方法,但我不知道是否" context"实际上是一个Android Context对象,但我假设它是。 我不确定的是你为什么要在减少pendingRequest之前等待4秒。我认为你想要减少,允许其他人添加一个待处理的请求4秒,如果在等待启动活动后它仍然是0 ...但是,我再也不能从片段中说出来。 / p>

答案 1 :(得分:0)

试试这个:

private static Object requestLock = new Object();
public static void runTask(final String p)
{
    synchronized(requestLock)
    {
        if (--pendingRequest > 0) // Decrement first
        {
            // There are more requests
            return;
        }
    }

    // Wait 4 sec and if there are still no requests start the activity.
     Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run()
            {
                synchronized(requestLock)
                {
                    if (pendingRequest == 0)
                    {
                        context.startActivity(p);
                    }
                }
            }
        }, 4000);
    }
}

注意:您还需要在增加pendingRequests的位置添加synchronized块。