更新UI
封装并简化了异步操作
Thread
和Handler
进行了封装Handler
异步消息处理机制<Params,Progress,Result>
onPreExecute
,onPostExecute
doInBackground
Params
(入),Result
(出)onProgressUpdate
Activity.runOnUiThread(Runnable)
View.post(Runnable)
View.postDelayed(Runnable,long)
继承
自AsyncTask
,
泛型
要填包装类
,或者自定义的Model类型
,
系统要求至少一定要继承doInBackground()
这个方法,
即在后台子线程
进行的一个方法,
doInBackground()
的参数类型
,
即泛型的第一个参数类型
,即入参Params
的参数类型
,
return 返回的是结果,即泛型的第三个参数:public class DownloadAsyncTask extends AsyncTask<String, Integer, Boolean> {
@Override
protected Boolean doInBackground(String... strings) {
return null;
}
}
String...
中的三个点,
表示该参数的长度是可变的;new
一下即可,
使用execute()
,传入可变长度的入参,
即可启动AsyncTask
:public class MainActivity extends AppCompatActivity {
//logt 然后回车,快速生成!!!!!!!!
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new DownloadAsyncTask().execute("哈喽", "早上好");
}
public class DownloadAsyncTask extends AsyncTask<String, Integer, Boolean> {
/**
* 方法执行在异步任务之前,执行在主线程中!!
* 方法体中,可以 ;‘’;操作UI !!
*/
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Boolean doInBackground(String... params) {
// fori 回车 快速生成!!!!!!!!!!!
for (int i = 0; i < 10000; i++) {
Log.i(TAG, "doInBackground " + i +
": " + params[0] + "," + params[1]);
}
return true;
}
}
}
运行:
public class MainActivity extends AppCompatActivity {
//logt 然后回车,快速生成!!!!!!!!
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new DownloadAsyncTask().execute("哈喽", "早上好");
}
public class DownloadAsyncTask extends AsyncTask<String, Integer, Boolean> {
/**
* 方法执行在异步任务之前,执行在主线程中!!
* 方法体中,可以 ;‘’;操作UI !!
*/
@Override
protected void onPreExecute() {
super.onPreExecute();
}
/**
* 本方法运行在子线程中,
* 处理工作内容、耗时操作
*
* @param params
* @return
*/
@Override
protected Boolean doInBackground(String... params) {
// fori 回车 快速生成!!!!!!!!!!!
for (int i = 0; i < 10000; i++) {
Log.i(TAG, "doInBackground " + i +
": " + params[0] + "," + params[1]);
publishProgress(i);//抛出进度
}
return true;
}
/**
* 本方法运行在主线程中,可以处理结果
*
* 当任务执行完了,会把上一个doInBackground()的参数传递过来
* @param aBoolean
*/
@Override
protected void onPostExecute(Boolean aBoolean) {
super.onPostExecute(aBoolean);
}
/**
* 本方法运行在主线程
* 进度变化就在这个方法处理
* 接收来自 doInBackground()中 publishProgress()抛出的进度,
* 并处理
*
* @param values 类型是定义时的第二个泛型参数,
* 数据来自 doInBackground()的 publishProgress()
*/
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}
}
}
onCancelled()
: