当显示插页式广告时,取消了Asynctask

时间:2014-04-21 21:37:08

标签: android android-asynctask ads

我的应用程序中有一个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()上。但这并不理想。

更新:不解决这个问题。但是,一旦我取消广告,该任务就会继续运行。然而几秒钟后它仍然被取消了。

1 个答案:

答案 0 :(得分:1)

我认为您的AsyncTask与您的Activity相关联(您的AsyncTask个实例可能是您Activity的一个属性 - 否则告诉我们他们是如何相互关联的所以我们可以帮忙)。因此,当您重新创建Activity时(例如通过执行setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)),AsyncTask引用将丢失(垃圾收集)并停止运行。

为了让AsyncTask在整个方向更改中保持运行,我的建议是遵循this sample project中显示的模式(尽管如此,在您使用的情况下,它的使用方式有点过时{ {1}},但它很简单并且有效。)