【发布时间】:2014-04-21 21:37:07
【问题描述】:
我的应用中有一个 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() 。但这并不理想。
更新:也没有解决这个问题。但是一旦我取消广告,任务似乎会继续运行。但是几秒钟后它仍然被取消。
【问题讨论】:
-
我相信这个问题会受益于显示更多代码,至少是来自您的活动的生命周期回调,以便其他成员可以弄清楚发生了什么。还有,你的广告shouldn't cause onPause() to be called,对不对?
标签: android android-asynctask ads