如何确保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方法中完成。
答案 0 :(得分:0)
AsyncTask自动创建自己的线程,您无需手动执行此操作 启动AsyncTask时会发生以下情况:
onPreExecute()
。doInBackground()
在单独的线程上执行。 onPostExecute()
被调用并在原始线程上运行时
doInBackground()
是
完成。所以你要做的就是在doInBackground()
方法中直接进行繁重的计算/加载/任何事情,然后完成onPostExectute()
中的事情。
答案 1 :(得分:0)
问题是您正在从doInbackground()内部创建一个新线程。
不要这样做,一般情况下,不要混合使用Thread和AsyncTask。将您的代码更改为
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
for (int i = 0; i < 200; i++) {
Log.e(TAG, ""+i);
}
return null;
}
这将确保在调用onPostExecute()之前doInBackground()中的所有代码都已完成。