Не удается отменить асинхронную задачу в Android

Мне нужно отменить мой асинхронный поток. В моем приложении я делаю некоторые тяжелые вычисления, и я хочу дать пользователю возможность отменить вычисления (а затем повторить попытку). Я читал на форумах, что вы можете 'просто остановите задачу от того, что она делает, и вам нужно проверить, является ли задача isCancelled = true внутри вашего кода DoinBackground. Но это нея не работаю

Сама задача работает отлично, и она выводит правильные данные, если я оставлю их до конца.

В моем приложении сначала я вызываю функцию naredi_pdf_start (view), затем, когда задача выполняется, если я вызываю close_pdf1 (view), это выдает мне ошибку. (Я меняю представления, и приложение может 'не могу найти мой pdf_text1 Textview при вызове publishProgress - исключение нулевого указателя). Я действительно не знаю, как использовать метод task.cancel (true) (в моем случае: start_pdf.cancel (true))).

Вот мой код:

String progress_pdf;
naredi_pdf start_pdf;

public void naredi_pdf_start(View view) {
    start_pdf=new naredi_pdf();
    start_pdf.execute();
}

public void close_pdf1(View view) {

    if(start_pdf!=null) {
        Log.v("not null","not null");

        start_pdf.cancel(true);
        setContentView(R.layout.other_view); //This is where 
                                             //I don't have TextView pdf_text1
    }
}

private class naredi_pdf extends AsyncTask {

    protected Void doInBackground( Void... ignoredParams ) {
        progress_pdf="Calculating Statistical Data";

        //A LOT OF CODING

        for(int i = 0; i < 1; i++) {
            if(isCancelled()) {
                break;
            }
            else {
                publishProgress("Calculating team statistics");  
            }
        }

        //MORE OF CODING              

        for (int i = 0; i < 1; i++) {
            if (isCancelled()) {
                break;
            }
            else {
                publishProgress("Calculating player's BIO");  
            }
        }

        //MORE OF CODING       

        for (int i = 0; i < 1; i++) {
            if (isCancelled()) {
                break;
            }
        else {
                publishProgress("Calculating player's individual performance");
            }
        }

        return null; 
    }

    protected void onPostExecute( Void array ) {
        //saving to database
    }

    protected void onProgressUpdate(String... values) {
        progress_pdf=values[0]+"\n"+progress_pdf;

        if (isCancelled())  {

        }
        else {
            TextView pdf_text1 = (TextView) findViewById (R.id.pdf_text1);
            pdf_text1.setText(progress_pdf);
            // dialog(view);
        }
    }
}

Ответы на вопрос(3)

Ваш ответ на вопрос