使用AsyncTask启动活动

Mah*_*mam 10 android android-asynctask

我使用asyncTask显示Dialog,然后几分钟后启动一个新活动.

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

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();
}
Run Code Online (Sandbox Code Playgroud)

}

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

private OnClickListener loginOnClick = new OnClickListener() {

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

有没有办法从我的subClass ofAsyncTask startActivity.

waq*_*lam 34

是的,您可以从AsyncTask的子类开始活动.见下文:

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

    activity.startActivity(new Intent(activity, BuiltInCamera.class));
}
Run Code Online (Sandbox Code Playgroud)

进行此更改后,请确保从中删除startActivityOnClickListener


Rag*_*aju 5

调用startActivity里面的onPostExecute方法AsyncTask


Shr*_*ant 5

调用此startActivity(new Intent(LoginActivity.this, BuiltInCamera.class));onPostExecute()显示敬酒消息之后.

通过这种方式,在您AsyncTask结束后将调用新活动.


小智 5

你也可以使用

    Intent intent = new Intent(activity, PageViewActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    activity.getApplicationContext().startActivity(intent);
Run Code Online (Sandbox Code Playgroud)