从AsyncTask更新活动

时间:2011-06-02 13:40:23

标签: android android-activity android-asynctask

所以我是一个学习android的iOS开发人员,我很难理解一些事情。现在我有一个datamanager类。在该类中,它有一个AsyncTask来更新数据。 OnPreExecute我弹出一个活动来显示它正在更新。我知道我可以使用额外的东西将初始信息传递给UpdateActivity。我的问题是我不确定如何在OnProgressUpdate中发送新信息。这是我的代码萎缩:

    private class myTask extends AsyncTask<Integer,String,Void>{

    @Override
    protected void onCancelled() {
        super.onCancelled();
        isUpdating = false;
    }

    @Override
    protected Void doInBackground(Integer... params) {
        //My BG Code
    }

    @Override
    protected void onPostExecute(Void result) {
        // TODO Remove updating view
        super.onPostExecute(result);
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        Intent myIntent = new Intent(mContext,UpdateActivity.class);
        mContext.startActivity(myIntent);
    }
}

2 个答案:

答案 0 :(得分:6)

AsyncTask旨在嵌套在Activity类中时效果最佳。

AsyncTask'特殊'的原因在于它不仅仅是一个工作线程 - 而是它将处理doInBackground(...)中代码的工作线程与在Activity的UI线程上运行的方法相结合 - {{1} }和onProgressUpdate(...)是最常用的。

通过定期从onPostExecute(...)调用updateProgress(...),调用doInBackground(...)方法,允许它操作Activity的UI元素(进度条,显示正在下载的文件名称的文本等) )。

简而言之,不是从AsyncTask触发'update'活动,而是更新Activity本身应该有一个嵌套的AsyncTask,用于处理更新并将进度发布到UI。

答案 1 :(得分:2)

您有两种选择:

1)将一个活动实例传递给AsyncTask构造函数,以便在其上调用一些方法:

new MyTask(this).execute();

所以,你可以这样做:

  public MyTask (Activity activity) {
   this.activity = activity;
  }

  public void onPostExecute(...) {
   activity.someMethod();
  }

2)传递Handler实例并从onPostExecute()向活动发送消息。