由于UI线程(也可叫主线程)负责处理用户输入事件(TP事件,显示事件等),直接与用户交互,如果UI线程阻塞,直接会影响用户的体验效果,严重的会报ANR错误。所以我们需要把耗时操作移出主线程,在子线程中进行处理。
//1.写一个内部类继承AsyncTask
class InitDataAsyncTask extends AsyncTask<Void, Void, Void> {
public InitDataAsyncTask() {
}
//2.在doInBackground()方法里加载的数据都是异步的,不会堵塞主线程,达到一个子线程加载的效果
@Override
protected Void doInBackground(Void... voids) {
initCityList();//子线程操作,异步操作放这个方法里
return null;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
}
3.在需要使用的地方new 这个内部类.execute()方法就可以了
new InitDataAsyncTask().execute();