我在我的活动类中创建了以下代码,即MainActivity.java。在这
代码应用程序访问服务器localhost。服务器端只是一个简单的PHP脚本
其中睡3秒,用于测试目的并返回简单的json数据。然后我做了
以下步骤,
1.启动我的应用程序
2.活动出现了,MainActivity.java
然后我立即按下按钮(活动被破坏)
4.大约2秒后,来自吐司的消息出现。
我不明白的事情是为什么onResponse方法,写在活动内部,即使在 活动被销毁,Toast.makeText()内的关键字不为空。
我测试了这个代码近十次。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
commitData();
.
.
}
@Override
public void onResponse(Object response) {
try {
if (response instanceof String) {
String jsonString = String.valueOf(response);
JSONObject jsonObject = new JSONObject(jsonString);
if (jsonObject.getInt("flag") < 0){
Toast.makeText(this, "Response success [OK].", Toast.LENGTH_LONG).show();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void commitData() {
.
.
Map<String, String> params = new HashMap<>();
params.put("id", "my_id");
.
.
stringRequest.setShouldCache(false);
requestQueue.add(stringRequest);
}
答案 0 :(得分:0)
在Volley中,所有网络和缓存调度都在一个单独的线程(引擎盖后)完成,同时响应被发送回主线程。这只意味着onResponse和onError发生在主线程中。 为了说明,请参见下图:在此输入图像描述
完成()只是隐藏,停止和销毁您的活动。你的进程仍然在运行。关于Destroy的Cancel the Volley request的最佳实践,您可以通过调用此对象上的cancel()取消Toast消息来取消它。