【发布时间】:2011-12-13 18:01:27
【问题描述】:
如何确保 doInBackground() 方法中的线程已经完成? 我想在调用 postExecute 之前完成我在 doInBackground() 方法中启动的线程。
package com.application.test;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
public class MyActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new MyTask().execute(null);
}
private class MyTask extends AsyncTask<Void, Void, Void>
{
protected static final String TAG = "Async";
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
for (int i = 0; i < 200; i++) {
Log.e(TAG, ""+i);
}
}
}).start();
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
Log.e(TAG, "Post execute");
}
}
}
我想确保线程只能在 doInBackground 方法中完成。
【问题讨论】:
-
请描述您的问题,以便更容易理解。如果您使用的是 AsyncTask,那么 onPostExecute() 方法就在那里。
-
我只想完成 doInBackground 方法中的线程。onPostExecute 不向您保证 doInBackground() 方法中正在执行的线程。
-
如果他像示例中那样在 doInBackground 中创建一个新线程,则不会。无论如何,你应该提高你的答题率。
-
我在 doInBackground() 中新建了一个线程,你可以观察
-
是的,你不应该这样做。 AsyncTask 会自动处理。