如果调用Aysnc任务的应用程序已经完成,返回值或对Aysnc任务的调用会发生什么?
假设我在Aysnc任务中调用了一个网络操作,并且调用它的UI线程已经完成了该操作。
我的目标是保存在N/W呼叫中收到的数据,以便下次我需要重新进行呼叫?
下面是代码片段,在doInBackground()中,我发出一个SOAP请求,当请求打开时,调用Aync任务的主UI不知何故死亡/完成。我的反应会怎样?如何保存响应以备将来使用。
Code:
class SOAPCallAyncTask1 extends AsyncTask<String, String, String> {
ProgressDialog pd = null;
@Override
protected void onPreExecute() {
super.onPreExecute();
pd = new ProgressDialog(SoapMainActivity.this);
pd.setMessage("Please wait...");
pd.setCancelable(false);
pd.show();
}
@Override
protected String doInBackground(String... params) {
String theResult = "";
byte[] result = null;
try {
result = callSOAPServer();
theResult = new String(result);
Log.d("R-Doit in backgound", theResult);
}
catch (Exception e) {
e.printStackTrace();
}
return theResult;
}
@Override
protected void onPostExecute(String theResult) {
super.onPostExecute(theResult);
pd.dismiss();
Log.d("R-Result", theResult);
}
}
AsyncTask
将完成执行,即使应用程序被关闭/销毁,除非系统调用它停止执行(通常不是这种情况)。
您可以保存在SharedPreferences
的网络调用中收到的数据,然后在活动被创建时(或在onResume()
中)再次(如果需要)通过从SharedPreferences
获取保存的数据来相应地更新UI。如果您看到在最后一次AsyncTask
执行期间没有获取数据,那么您可以相应地发出一个新的执行请求。