前言:
-
由于Android的特性,如果在主线程中执行耗时操作会导致程序无法及时响应,因此耗时的操作必须放在子线程中去执行。(如网络请求、访问大量数据)。
-
尽管AsyncTask、HanderThread,IntentService的表现形式都有别于传统的线程,但是它们的本质都是传统的线程。
-
AsyncTask封装了线程池和Handler,它主要是为了开发者在子线程中更新UI。
-
HandlerThread是一种具有消息循环的线程,它的内部可以使用Handler。
-
IntentService是一个服务,系统对其进行了封装使其可以更方便地执行后台服务,IntentService内部采用了HandlerTHread来执行任务,当任务执行完了之后会自动退出。
1、 AsyncTask
使用方法:创建类继承自AsyncTask,重写一系列方法
(方法作用看代码注释)
public class MyAsyncTask extends AsyncTask<String ,Long,Long> {
Context context;
public MyAsyncTask(Context context) {
this.context = context;
}
//任务开始前调用
@Override
protected void onPreExecute() {
super.onPreExecute();
Toast.makeText(context,"开始执行AsyncTask,咋哇撸多!",Toast.LENGTH_SHORT).show();
}
//后台执行任务时调用
@Override
protected Long doInBackground(String... strings) {
for(int i=0;i<3;i++){
Log.d("time",i+"秒过去了")