Frage an android, android-asynctask – Verwenden von AsyncTask zum Starten der Aktivität

10

Ich verwende asyncTask, um den Dialog anzuzeigen, und starte dann nach einigen Minuten eine neue Aktivität.

Leider beginnt diese Aktivität, bevor die Aufgabe beendet ist.

package com.android.grad;

import android.app.Activity;

import android.app.ProgressDialog;

import android.os.AsyncTask;

import android.widget.Toast;

public class LoginTask extends AsyncTask<Void, Void, Boolean> {
private Activity activity;
private ProgressDialog pd;

public LoginTask(Activity activity) {
    this.activity = activity;
}

@Override
protected void onPreExecute() {
    pd = ProgressDialog.show(activity, "Signing in",
            "Please wait while we are signing you in..");
}

@Override
protected Boolean doInBackground(Void... arg0) {
    try {
        Thread.sleep(10000000);
    } catch (InterruptedException e) {
    }
    pd.dismiss();
    return true;
}

@Override
protected void onPostExecute(Boolean result) {
    Toast.makeText(activity, Boolean.toString(result), Toast.LENGTH_LONG).show();
}

}

und ich führe die Aufgabe vom Knopfklicklistener aus: S

private OnClickListener loginOnClick = new OnClickListener() {

        public void onClick(View v) {
            new LoginTask(LoginActivity.this).execute();
            startActivity(new Intent(LoginActivity.this, BuiltInCamera.class));
        }
    };

Gibt es eine Möglichkeit, Active aus meiner Unterklasse von AsyncTask zu starten.

Ja, Sie sollten es in Ihrer onPostExecute-Methode starten, direkt nachdem Sie Ihren Toast gezeigt haben Tomislav Novoselec
Die Methode kann onPostExecute nicht aufrufen Mahmoud Emam
verbessern Sie Ihre Akzeptanzrate .. Nishant

Deine Antwort

4   die antwort
34

Sie können die Aktivität in der Unterklasse von AsyncTask starten. Siehe unten:

@Override
protected void onPostExecute(Boolean result) {
    Toast.makeText(activity, Boolean.toString(result), Toast.LENGTH_LONG).show();

    activity.startActivity(new Intent(activity, BuiltInCamera.class));
}

Stellen Sie nach dieser Änderung sicher, dass Sie sie entfernenstartActivity vonOnClickListener

dann wird es abstürzen. Überprüfen Sie zur Sicherheit, obactivity != null bevor Sie seine Referenz verwenden waqaslam
Was ist die Aktivität? (neue Absicht (Aktivität, ...) Mathieu
activity ist der Verweis auf Ihre Aktivität, d. h. er wird über den AsyncTask-Konstruktor empfangen. waqaslam
Und wenn die Aktivität zerstört wird? Brais Gabin
Ich habe eine bessere Lösung gefunden:stackoverflow.com/a/9118319/842697 Brais Gabin
5

Sie können auch verwenden

    Intent intent = new Intent(activity, PageViewActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    activity.getApplicationContext().startActivity(intent);
Es funktioniert einwandfrei, aber in meinem Versuch läuft die Aktivität für zwei Mal - eine in der neuen Aktivität (erste Zeile - und zweite in der dritten Zeile ehsan wwe
5

startActivity(new Intent(LoginActivity.this, BuiltInCamera.class)); vononPostExecute() nach dem Anzeigen der Toastnachricht.

Auf diese Weise wird eine neue Aktivität nach Ihrer aufgerufenAsyncTask ist vorbei.

5

startActivity InnerhalbonPostExecute Methode vonAsyncTask

Dies funktioniert nur, wenn dieAsyncTask ist eine innere Klasse Brais Gabin
Die Methode wird nicht gefunden: S Ich versuche es immer mehr Mahmoud Emam
Sie sollten YourClassActivityName.this.startActivity verwenden. Dann wird es funktionieren Raghu Nagaraju

Verwandte Fragen