Dr.*_*cky 6 android android-animation android-activity
我通过Volley向服务器发送请求; 发送后,增加一个显示请求数的变量.
VolleyGeneral.getInstance().addToRequestQueue(jsonObj,TAG);
numberOfReq++;
Run Code Online (Sandbox Code Playgroud)
然后,当我得到响应时,减少该变量.
@Override
public void onResponse(JSONObject response){
numberOfReq--;
}
Run Code Online (Sandbox Code Playgroud)
另一方面,我正在显示一个图像,使用淡入淡出动画2秒然后我完成了活动并转到下一个活动.
但我想在完成活动之前等待所有服务器响应.所以我写这个部分是这样的:
@Override
public void onAnimationEnd(Animation anim){
while(numberOfReq == 0){
numberOfReq = -1;
startActivity(intent);
finish();
break;
}
}
Run Code Online (Sandbox Code Playgroud)
如果服务器在2秒之前发送响应,则一切都是Okey.
但是如果在2秒后收到回复,活动就没有完成.
也许我不明白这个问题,因为答案看起来非常简单。只需在活动“准备完成”时设置一个标志,然后onResponse()也检查此情况。
其中一个onAnimationEnd()或最后一个onResponse()将首先运行,第二个应该启动第二个活动。例如:
private boolean mReadyToProceed;
@Override
public void onAnimationEnd(Animation anim)
{
if (numberOfReq == 0)
startOtherActivityAndFinish();
else
mReadyToProceed = true;
}
@Override
public void onResponse(JSONObject response)
{
numberOfReq--;
if (mReadyToProceed && numberOfReq == 0)
startOtherActivityAndFinish();
}
Run Code Online (Sandbox Code Playgroud)
(注意:确保递减和比较不受其他请求线程完成的影响,可能使用锁或使用AtomicInteger)。