Pergunta sobre android-asynctask, android – Usando o AsyncTask para iniciar a atividade

10

Eu estou usando o asyncTask para mostrar o Dialog e depois de alguns minutos, em seguida, inicie uma nova atividade.

infelizmente essa atividade começa antes da tarefa terminar ???

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

}

e eu executar a tarefa do ouvinte de clique de botão: S

private OnClickListener loginOnClick = new OnClickListener() {

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

Existe maneira de iniciarActivity da minha subClass ofAsyncTask.

sim, você deve iniciá-lo no seu método onPostExecute, logo depois de mostrar seu Toast Tomislav Novoselec
melhore sua taxa de aceitação. Nishant
o método não pode chamar dentro onPostExecute Mahmoud Emam

Sua resposta

4   a resposta
5

startActivity dentroonPostExecute método deAsyncTask

Isso só funciona se oAsyncTask é uma classe interna Brais Gabin
você deve usar YourClassActivityName.this.startActivity. Então vai funcionar Raghu Nagaraju
o método não é encontrado: S eu tento mais e mais Mahmoud Emam
5

startActivity(new Intent(LoginActivity.this, BuiltInCamera.class)); deonPostExecute() após a exibição da mensagem do brinde.

Desta forma, a nova atividade será chamada após o seuAsyncTask está acabado.

34

você pode iniciar a atividade da subclasse do AsyncTask. Ver abaixo:

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

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

Depois de fazer essa alteração, certifique-se de removerstartActivity deOnClickListener

então ele irá falhar. por um lado seguro, verifique seactivity != null antes de usar sua referência waqaslam
O que a atividade vem? (nova intenção (atividade, ...) Mathieu
activity é a referência à sua Atividade, ou seja, recebida através do construtor do AsyncTask. waqaslam
Eu encontrei uma solução melhor:stackoverflow.com/a/9118319/842697 Brais Gabin
E se a atividade é destruída? Brais Gabin
5

Você também pode usar

    Intent intent = new Intent(activity, PageViewActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    activity.getApplicationContext().startActivity(intent);
funciona bem, mas na minha tentativa a atividade é executada por tempo de reboque - uma em atividade nova (primeira linha - e segunda na terceira linha ehsan wwe

Perguntas relacionadas