Android更新UI元素的由主线程来处理,工作线程只能做逻辑运算处理,处理好之后通过Handler发Message给主线程。
主线程启动后会建立一个 loop 对象,一直在跑循环,定时检查 MessageQueue,取出Message 进行界面更新。
Google这样设计的目的在于让主线程不需要处理线程安全问题,不需要加解锁,大大提高了APP的性能。 这和windows PC开发的机制是一样。
如果UI线程执行某个逻辑运算时间过长的话,超过5秒,系统就会弹出警告,是否继续等待APP的响应还是关闭。这就是著名的 ANR。
因此,所有的耗时操作都应该放在 子线程中运行,比如:访问网络、数据库操作、JSON解析等。
Android常用的线程实现方式有 Thread 和 AsyncTask。
private class MyAsyncTask extends AsyncTask<String, Integer, String> {
//doInBackground方法内部执行后台任务,不可在此方法内修改UI
@Override
protected String doInBackground(String... params) {
return GetWebData(params[0]);
}
//onPostExecute方法用于在执行完后台任务后更新UI,显示结果
@Override
protected void onPostExecute(String result) {
mTvContent.setText(result);
}
}
GitHub地址:
https://github.com/wuzhuojun/firstcode/tree/master/fcode3