Asynchrone Aufgabe in Android kann nicht abgebrochen werden

Ich muss meinen Asyncthread abbrechen. In meiner Anwendung führe ich einige schwere Berechnungen durch und möchte dem Benutzer die Möglichkeit geben, Berechnungen abzubrechen (und dann erneut zu versuchen). Ich habe in Foren gelesen, dass Sie die Aufgabe nicht einfach daran hindern können, was sie tut, und dass Sie in Ihrem DoinBackground-Code überprüfen müssen, ob die Aufgabe abgebrochen = wahr ist. Aber das funktioniert bei mir nicht.

Die Aufgabe selbst funktioniert sehr gut und gibt korrekte Daten aus, wenn ich sie für sich selbst freigegeben habe.

In meiner App rufe ich zuerst die Funktion naredi_pdf_start (view) auf. Wenn die Task ausgeführt wird und close_pdf1 (view) aufgerufen wird, wird eine Fehlermeldung ausgegeben - Nullzeigerausnahme). Ich weiß wirklich nicht, wie man die task.cancel (true) -Methode verwendet (in meinem Fall: start_pdf.cancel (true)).

Hier ist mein Code:

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<Void, String, Void> {

    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);
        }
    }
}

Antworten auf die Frage(3)

Ihre Antwort auf die Frage