所以我有一个问题,如果它是一个愚蠢的我在前面道歉,我试图搜索它但不确定要搜索到什么。我正在尝试运行一个延迟的任务,但只有当我的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()之后我还有其他活动添加到挂起请求中。如果这没有任何意义,请告诉我,我会尝试改写它。
答案 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块。