使用AsyncTask启动Activity

11

我正在使用asyncTask显示对话框,然后几分钟后启动一个新活动。

不幸的是,该活动在任务完成之前就开始了???

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

我从按钮点击监听器中执行任务:S

private OnClickListener loginOnClick = new OnClickListener() {

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

有没有办法从我AsyncTask的子类启动startActivity。


是的,你应该在onPostExecute方法中开始它,在你显示Toast之后。 - Tomislav Novoselec
该方法不能在onPostExecute内调用。 - Mahmoud Emam
提高你的接受率。 - Nishant
4个回答

34

是的,你可以从AsyncTask的子类启动Activity。请见下文:

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

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

在进行此更改后,请确保从OnClickListener中删除startActivity


1
活动是什么?(新意图(活动,...) - Mathieu
1
activity 是指您的 Activity,即通过 AsyncTask 的构造函数接收到的引用。 - waqaslam
如果活动被销毁了呢? - Brais Gabin
那么它将崩溃。为了安全起见,在使用引用之前,请检查activity != null - waqaslam

5
您也可以使用。
    Intent intent = new Intent(activity, PageViewActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    activity.getApplicationContext().startActivity(intent);

它能够正常运行,但在我的尝试中,该活动运行了两次 - 一次在新的活动中(第一行),另一次在第三行。 - ehsan wwe

5

AsyncTaskonPostExecute方法中调用startActivity


方法未找到 :S 我尝试了很多次 - Mahmoud Emam
1
你应该使用 YourClassActivityName.this.startActivity。这样就可以正常工作了。 - Raghu Nagaraju

5

在显示toast消息后,从onPostExecute()中调用此startActivity(new Intent(LoginActivity.this, BuiltInCamera.class));

这样做可以在您的AsyncTask结束后调用新的活动。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接