壹 . 线程优化:
总结:手机的 CPU 资源是有限的,内存也是有限的,如果无节制的同一时刻创建的大量的线程,就会导致线程和 UI 线程同时抢占 CPU 资源,造成 UI 线程执行变慢,产生卡顿等问题;并且线程创建是有代价的,线程不但占用了大量的 CPU 资源,同时也占用了大量的内存资源,Android 在真正创建线程时,会为每个线程申请 1040KB 的内存资源,大量的线程就有可能导致 OOM 等问题。另外,线程的创建和销毁也会占用系统资源来执行,所以应该合理的使用线程。
一 . 使用handler发送消息模拟延时操作 避免多创建线程导致资源紧张。
二 . 同一时段避免大量创建线程,造成各线程抢占cpu和内存资源造成卡顿甚至oom和anr发生。
三 . 给异步任务设置优先级让其 重要的任务交给高优先级的线程去完成 而低优先级的任务给到低优先级的线程去完成 控制其数量让他们慢慢执行 例如这些不紧急的任务只为他们创建一个线程让他们不紧不慢的完成这些任务 并不会影响到ui线程导致阻塞 ,举例:下载一些插件化的内容 后台更新等 ,并且需要注意线程不能长时间阻塞,否则会影响后续任务的执行 。
四 . 使用线程池来控制线程数量并且复用线程 避免线程过多导致的卡顿 以及频繁创建销毁线程导致内存碎片化 内存抖动等问题
五 . 不要使用线程的默认优先级,否则会造成线程优先级跟随父线程的优先级的问题,例如在ui线程中创建一个子线程,这个子线程的优先级就是和ui线程的优先级一致,这个优先级就有可能比其他除了ui线程外所有的优先级都高 导致本来想让提前执行的线程排到这个线程之后。
六 . 设置优先级的时候尽可能的设置的低一点,避免和ui线程抢cpu资源。
七 . 设置线程优先级时注意设置方式:
1. 使用Thread类实例的setPriority()方法 设置线程优先级。
2. 使用Process类的setThreadPriority()方法 设置线程优先级