我通过Volley向服务器发送请求;发送后,增加一个显示请求数的变量.
VolleyGeneral.getInstance().addToRequestQueue(jsonObj,TAG); numberOfReq++;
然后,当我得到响应时,减少该变量.
@Override public void onResponse(JSONObject response){ numberOfReq--; }
另一方面,我正在显示一个图像,使用淡入淡出动画2秒然后我完成了活动并转到下一个活动.
但我想在完成活动之前等待所有服务器响应.所以我写这个部分是这样的:
@Override public void onAnimationEnd(Animation anim){ while(numberOfReq == 0){ numberOfReq = -1; startActivity(intent); finish(); break; } }
如果服务器在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(); }
(注意:确保减量和比较不受其他请求线程的影响,可能使用锁或使用AtomicInteger).