先来看一个例子,在主线程增加一个耗时线程,Android会因为UI无法响应用户操作造成超时报错终止App运行。
(1)新建一个module,命名为ThreadDemo。
(2)布局文件activity_main.xml。
(3)MainActivity.java。
(4)运行效果,见图4.29。
图4.29
新开一个线程执行耗时操作,UI就可以响应用户操作。
(5)新开一个线程MainActivity.java。
(6)运行效果,见图4.30。
图4.30
在新开线程中处理View的操作,低版本API会报Only the original thread that created a view hierarchy can touch its views异常(API 25以下测试均报异常,API 28不报异常,这和新API中更新View的代码中不再对进程进行判断有关)。(www.xing528.com)
(7)在布局文件里增加一个TextView用于显示新开线程回传数据activity_main.xml。
(8)修改MainActivity.java。
(9)API 22模拟器运行效果,见图4.31。
图4.31
解决上述问题的方法有以下几种:
第一种处理方法是把访问UI组件任务交给主线程(UI线程)去处理,使用runOnUiThread(new Runnable())方法,修改MainActivity.java如下:
API 22模拟器运行效果,见图4.32。
图4.32
第二种处理方法是使用UI组件的post方法,修改MainActivity.java如下:
第三种处理方法是使用UI组件的postDelayed方法,修改MainActivity.java如下:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。