Pregunta sobre android-asynctask, android – Usando AsyncTask para iniciar la actividad

10

Estoy usando asyncTask para mostrar Dialog y luego, después de unos minutos, lanzar una nueva actividad.

desafortunadamente esa actividad comienza antes que la tarea termine ???

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

}

y ejecuto la tarea desde el botón clic oyente: S

private OnClickListener loginOnClick = new OnClickListener() {

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

¿Hay alguna manera de iniciar la actividad desde mi subclase de AsyncTask?

mejorar su tasa de aceptación .. Nishant
Sí, debes iniciarlo en tu método onPostExecute, justo después de mostrar tu Toast. Tomislav Novoselec
el método no puede llamar dentro de onPostExecute Mahmoud Emam

Tu respuesta

4   la respuesta
5

También puedes usar

    Intent intent = new Intent(activity, PageViewActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    activity.getApplicationContext().startActivity(intent);
funciona bien, pero en mi intento, la actividad se ejecuta durante el tiempo de arrastre: una en una actividad nueva (primera línea) y una segunda en la tercera línea. ehsan wwe
5

Llama estostartActivity(new Intent(LoginActivity.this, BuiltInCamera.class)); desdeonPostExecute() después de mostrar mensaje de brindis.

De esta manera, se llamará nueva actividad después de suAsyncTask se acabó.

5

LlamadastartActivity dentroonPostExecute método deAsyncTask

El método no se encuentra: S lo intento más y más Mahmoud Emam
Esto solo funciona si elAsyncTask es una clase interna Brais Gabin
Debes usar YourClassActivityName.this.startActivity. Entonces funcionará Raghu Nagaraju
34

Sí, puede iniciar la actividad desde la subclase de AsyncTask. Vea abajo:

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

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

Después de hacer este cambio, asegúrese de eliminarstartActivity desdeOnClickListener

Encontré una mejor solución:stackoverflow.com/a/9118319/842697 Brais Gabin
¿Y si se destruye la actividad? Brais Gabin
¿A qué viene la actividad? (nueva intención (actividad, ...) Mathieu
activity es la referencia a su Actividad, es decir, recibida a través del constructor de AsyncTask. waqaslam
entonces se estrellará. por el lado seguro hacer un cheque siactivity != null antes de usar su referencia waqaslam

Preguntas relacionadas