Made with Remarkable!
我写的程序程序为什么这么卡
程序卡分为两个方面:1.界面呈现的慢。2.操作相应慢。
今天我们从最表层来解决一下程序卡的原因: UI线程受阻
(不考虑过度绘制,内存过大泄露等高大上的问题)。
原理
什么叫做UI线程,UI线程也叫做主线程,控制UI更新绘制的线程。屏幕上的控件(View)如按钮,不是你不动他他就不动的,而已以一定周期进行更新绘制的。手机的卡顿就是更新绘制被阻碍了,也叫阻塞。当阻塞时间过长就会出现ANR, 来提醒用户这个程序是个坑你现在可以关闭他,如果你觉得他还可以治疗一下,也可选择等待。
耗时操作
哪到底是什么使得UI绘制收到了阻塞,答案有一个,那就是我们在写程序的时候耗时操作写在了主线程里面。耗时操作都有哪些呢?
- 网络请求。android4.0以后禁止在主线程里面写网络请求。
- 文件读写。
- 处理大量数据。如没有break 的for循环。
- 图片处理。 处理大图片时是一个极具危险的事情(如oom )
- ……
怎么解决呢?多线程编程。
解决
在很多语言中都有多线程编程的内容,web需要高并发,对多线程的需求尤其明显。但是android开发中,随着安卓手机的不断的加强配置,小型的程序即使没有多线程也不会太卡。从而我们有点忽略多线程。但是我们不断的提高自己的能力。程序写的越来越大,那性能就进入了我们的视野。
线程
线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是行程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并行多个线程,每条线程并行执行不同的任务
-维基百科
java 的线程使用方式也能在android中使用。然而 google工程师给我们提供了一套适合android的方案
我们就有了一下几个名词
- Thread
- Looper
- Handler
- HandlerThread
- AsyncTask
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于