1.什么是ui线程阻塞?
当界面执行耗时操作时,界面不能操作,出现阻塞,这叫ui线程阻塞。
解决方案:多线程处理,但是出现缺点,不能直接修改组件,因为官网的规则:
第一条:不能出现ui线程阻塞
第二条:不能在非ui线程执行修改组件的代码
如果出现第二个问题,就报错:非ui线程不能修改组件
解决方案有两种:
1)view.post,执行的代码提交给ui线程的任务队列执行,其实就是ui线程里面执行,不违反第二条规则。
缺点:这种方案可读性差,并且难维护,官方给出第二个方案。
2)AsyncTask:
public class mytask extends AsyncTask<String, Void, Integer> {
@Override
protected Integer doInBackground(String... arg0) {
// 执行耗时操作
try {
Thread.sleep(5000);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return 10;
}
protected void onPostExecute(Integer result) {
// 修改组件
btn.setText(""+10);
};
}