AsyncTask 异步
AsyncTask的执行分为四个步骤,每一步都对应一个回调方法,这些方法不应该由应用程序调用,开发者需要做的就是实现这些方法。
onPreExecute(), 该方法将在执行实际的后台操作前被UI thread调用。可以在该方法中做一些准备工作,如在界面上显示一个进度条。
doInBackground(Params...), 将在onPreExecute 方法执行后马上执行,该方法运行在后台线程中。这里将主要负责执行那些很耗时的后台计算工作。可以调用 publishProgress方法来更新实时的任务进度。该方法是抽象方法,子类必须实现。
onProgressUpdate(Progress...),在publishProgress方法被调用后,UI thread将调用这个方法从而在界面上展示任务的进展情况,例如通过一个进度条进行展示。
onPostExecute(Result), 在doInBackground 执行完成后,onPostExecute 方法将被UI thread调用,后台的计算结果将通过该方法传递到UI thread.
doInBackground方法和onPostExecute的参数必须对应,这两个参数在AsyncTask声明的泛型参数列表中指定,第一个为doInBackground接受的参数,第二个为显示进度的参数,第第三个为doInBackground返回和onPostExecute传入的参数。
import com.dyqs.hshshop.R;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PageJumpTask pageTask=new PageJumpTask(3000);
pageTask.execute();
}
/*内部类,扩展AsyncTask,实现过渡页面*/
class PageJumpTask extends AsyncTask<Void, String, View>{
int minTimeSpan;
public PageJumpTask(int timespan){
this.minTimeSpan=timespan;
}
@Override
protected View doInBackground(Void...voids) {
// TODO Auto-generated method stub
long timeOriginalValue=System.currentTimeMillis();//初始时刻
View view=getLoginView();
long timeEndValue=System.currentTimeMillis();//加载View后的时刻
if((timeEndValue-timeOriginalValue)<minTimeSpan){
try {
Thread.sleep(minTimeSpan-(timeEndValue-timeOriginalValue));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return view;
}
/*
* 获取要加载的页面
* */
private View getLoginView(){
return getLayoutInflater().inflate(R.layout.login,null);
}
@Override
protected void onPostExecute(View result) {
setContentView(result);
}
}

浙公网安备 33010602011771号