我写的程序程序为什么这么卡

本贴最后更新于 2979 天前,其中的信息可能已经时移世异

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

 

  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    334 引用 • 323 回帖 • 5 关注
  • 线程
    122 引用 • 111 回帖 • 3 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 2

    卡卡就习惯了

    1 回复
  • jzw
    作者

    卡卡是踢球的那个吗?