我的应用程序中有一个Asynctask,它在后台运行一个进程来加载网站并从中检索信息。在此期间,我会显示一个加载对话框。
虽然此过程正常,但我会展示插页式(全屏)广告。
编辑:显示此广告时(不一定按x时),应用取消我的Asynctask。
我希望广告不要取消我的Asynctask。
private class LongOperation extends AsyncTask<Object, Void, String> {
ProgressDialog dialog;
@Override
protected String doInBackground(Object... params) {
try {
Log.d(TAG, "Parsing website...");
ArrayList<String> links = new ArrayList<String>();
links = pullLinks((String) params[1]);
Configuration config = new Configuration();
config.setLocalStoragePath((String) params[0]);
// Get desktop versions only
config.setBrowserUserAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4");
Goose goose = new Goose(config);
Article article = goose.extractContent(links.get(0));
return article.cleanedArticleText();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "";
}
@Override
protected void onPostExecute(String webText) {
// Allow rotation
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
Log.i(TAG, "EXECUTED");
if (webText.equals(""))
handleSendText(UNSUPPORTED_WEBSITE);
else
handleSendText(webText);
dialog.dismiss();
super.onPostExecute(webText);
}
@Override
protected void onPreExecute() {
lockOrientation();
dialog = ProgressDialog.show(PasteActivity.this, "Add",
"Getting article from website, please wait...", true, true,
new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
dialog.dismiss();
LongOperationTask.cancel(true);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}
});
dialog.setCancelable(false);
}
@Override
protected void onCancelled() {
Toast.makeText(PasteActivity.this, "Adding cancelled.",
Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
@Override
protected void onProgressUpdate(Void... values) {
}
}
另一个编辑:添加:
dialog.setCanceledOnTouchOutside(false);
也不解决这个问题。
编辑:删除:
LongOperationTask.cancel(true);
也不解决这个问题。
编辑:所以我意识到插页式广告实际上会在我的活动上调用onPause()。在我的onPause我取消了我的任务。我试图将取消任务移到onStop()上。但这并不理想。
更新:不解决这个问题。但是,一旦我取消广告,该任务就会继续运行。然而几秒钟后它仍然被取消了。
答案 0 :(得分:1)
我认为您的AsyncTask
与您的Activity
相关联(您的AsyncTask
个实例可能是您Activity
的一个属性 - 否则告诉我们他们是如何相互关联的所以我们可以帮忙)。因此,当您重新创建Activity
时(例如通过执行setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)
),AsyncTask
引用将丢失(垃圾收集)并停止运行。
为了让AsyncTask
在整个方向更改中保持运行,我的建议是遵循this sample project中显示的模式(尽管如此,在您使用的情况下,它的使用方式有点过时{ {1}},但它很简单并且有效。)