- 进程:正在运行的程序,不负责任务处理,负责程序运行所需要的资源(主要是内存资源)
- 线程:执行任务的最小单位,真正处理任务
多线程:多个线程完成一个功能(QQ)
线程的状态:
启动状态 start()
就绪状态 (随时等待CPU)
运行状态 (执行任务)
阻塞状态 (没有时间片/被强行暂停)
就绪状态
运行状态
销毁/死亡状态(执行完毕)
Android线程分为两类
- UI主线程:负责UI的相关事务
- 添加控件
- 显示控件
- 改变控件内容
- 子线程:
处理耗时的任务(加载图片资源 视频 音频 写入文件)
约定:
- 当主线程>5s没反应,ANR(Application not responding)
- 运行->UI线程(和用户交互)->加载数据10m(阻塞主线程)->继续执行
- 程序是从上至下执行的
- 同一时间,一个线程只做一件事
- 每一次线程的执行都是不一样的,线程的执行时间和资源是不定的,是靠抢夺CPU资源分配
- Activity的启动onCreate onStart onReStart
- onResume
这几个方法会影响一个每个对象都有一把锁,多个线程操作同一个资源时,考虑是否需要加锁,
同步代码块 synchronized
Hander 子线程与主线程之间交互
hander 管理消息的分支
---handerMessage
-Message 携带的数据
---what 可以通过这个属性确定哪个线程发送过来的消息()
MessageQuene 存储消息
--Looper 从消息队列获取消息
---dispatchMessage ->hander
-sendEmptyMessage(what)
发送空消息 不带数据
如何开启一个线程?
- Thread.currentThread
- Name()设置线程名称
- Start()启动线程
a定义一个类继承于Thread类
b定义一个类继承于Runnable类