如何从AsyncTask中的onPostExecute发回数据?

我的问题是相同的这个实例variables的活动没有在AsyncTask的onPostExecute设置或如何从AsyncTask返回到主UI线程的数据,但我想发回数据回到相同的调用活动。 不意图的startActivity始终重新启动活动

Solutions Collecting From Web of "如何从AsyncTask中的onPostExecute发回数据?"

On选项是使用监听器,在那里你创build一个你的活动实现的接口,如下所示:

public interface AsyncListener { public void doStuff( MyObject obj ); } 

这样,如果你是inheritanceAsyncTask,那么添加这个监听器很容易,然后在onPostExecute()中,你可以这样做:

 protected void onPostExecute( MyObject obj ) { asyncListener.doStuff(obj); } 

这取决于你的类结构,但是如果你的AsyncTask是你的Activity中的一个类,那么你可以引用该活动的方法。 你要做的是在你的onPostExecute方法中调用你的Activity的一个函数,将AsyncTask中检索到的一些数据传递给你可以使用它的活动。

代码看起来像这样

 class YourActivity extends Activity { private static final int DIALOG_LOADING = 1; public void onCreate(Bundle savedState) { setContentView(R.layout.yourlayout); showDialog(DIALOG_LOADING); new LongRunningTask1().execute(1,2,3); } protected Dialog onCreateDialog(int dialogId) { switch(dialogId) { case DIALOG_LOADING: ProgressDialog pDialog = new ProgressDialog(this); pDialog.setTitle("Loading Data"); pDialog.setMessage("Loading Data, please wait..."); return pDialog; default: return super.onCreateDialog(dialogId); } } private void onBackgroundTaskDataObtained(List<String> results) { dismissDialog(DIALOG_LOADING); //do stuff with the results here.. } private class LongRunningTask extends AsyncTask<Long, Integer, List<String>> { @Override protected void onPreExecute() { //do pre execute stuff } @Override protected List<String> doInBackground(Long... params) { List<String> myData = new ArrayList<String>(); for (int i = 0; i < params.length; i++) { try { Thread.sleep(params[i] * 1000); myData.add("Some Data" + i); } catch(InterruptedException ex) { } } return myData; } @Override protected void onPostExecute(List<String> result) { YourActivity.this.onBackgroundTaskDataObtained(result); } } } 

所以典型的stream程就是这样,设置当前页面的视图,然后显示进度对话框。 在此之后,开始asynchronous任务(或者每当它真的没关系)。

完成asynchronous任务后,调用活动的函数并将其传递给数据。 不要在asynchronous任务中使用共享数据,否则可能会导致线程问题。相反,一旦完成,将它传递给活动。 如果你想在工作中逐步更新视图,你可以在onProgressUpdate上使用