Async任务中的上下文是什么

时间:2013-05-15 13:30:23

标签: android android-asynctask

我在android中运行Async(doInBackground)任务。

我需要填充任务的进度条。所以我在onPreExecute中显示了progressDialog,

ProgressDialog.show的签名是Show(Context,Title,message)

但这里的上下文是什么?

 @Override
protected void onPreExecute() 
{
    progress = ProgressDialog.show(???, "Loading", "Please Wait");
}

6 个答案:

答案 0 :(得分:2)

为AsyncTask创建一个构造函数,它将上下文作为参数。

public class async extends AsyncTask<String, Integer, String>{

    private Context context;

    public async(Context context) {
      this.context = context;
     }


    @Override
    protected void onPreExecute() {
     // Manipulate progress bar      
    }

然后用它来执行它

async mTask = new async(context).execute(params);

答案 1 :(得分:1)

Context只能是Activity,Service或Brodcast,而不是像Asyncktask这样的任何其他类。所以将Activity的Context放在你使用AsyncTask类的地方。

答案 2 :(得分:1)

您可以在AsyncTask构造函数中传递活动上下文以创建ProgressDialog:

MyAsyncTask构造函数:

public MyAsyncTask(Context context){
     progressDialog = new ProgressDialog(context, "Loading", "Please wait...");
}

onPreExecute方法:

@Override
protected void onPreExecute() 
{
    progressDialog.show();
}

或存储上下文并在onPreExecute方法中创建对话框(但我更喜欢使用第一种方式):

public class MyAsyncTask extends AsyncTask{
     private Context mContext;

     public MyAsyncTask(Context context){
          this.mContext = context; 
     }

     @Override
     protected void onPreExecute() 
     {
          progress = ProgressDialog.show(this.mContext, "Loading", "Please Wait");
     }
}

在声明MyAsyncTask的活动中,您传递活动:

MyAsyncTask asyncTask = new AsyncTask(this);
asynchTask.execute();

答案 3 :(得分:1)

Add this function in your class

   private Context getDialogContext() {
    Context context;
    if (getParent() != null)
        context = getParent();
    else
        context = this;
    return context;
}

In your asynctask use it as follows

  @Override
  protected void onPreExecute() 
  {
    progress = ProgressDialog.show(getDialogContext(), "Loading", "Please Wait");
    }

答案 4 :(得分:0)

如果您只想使用this作为上下文,那么您的Asynctask应该被编写为扩展Activity类的类的内部类。然后,您的上下文是扩展Activity的类的名称。更好的做法是传递这样的上下文:

ClassExtendingActivity.this

答案 5 :(得分:-1)

您可以传递当前活动视图参考,例如MainActivity.this