1、DDMS中可以看见的系统线程(Andorid3.1的Galaxy Tab 10.1为例):

main

HeapWorker    执行finalize函数和引用对象清理

GC        Garbage Collector垃圾收集

Signal Catcher   捕捉Linux信号进行处理

JDWP       Java Debug Wire Protocol 调试协议服务

Compiler      JIT compiler 即时编译器

Binder Thread #1  Binder通讯

Binder Thread #2

2、Thread

Thread对象,也就是Java定义的Tread类的实例。是自己带有调用栈的执行单位

典型错误:调用run(),而不用start()  这会让Thread / 或Runnable对象的run()方法,在当前线程中被调用执行。没有产生新线程

3、改变线程优先级的方法

(1)Thread的优先级从1 到10

Thread.setPriority()可以

Thread thread = new Thread("thread name"){

  @override

  public void Runnable(){

  }

}

thread.setPriority(Thread.MAX_PRIORITY);//最高优先级 (比UI线程高)

thread.start();

MIN_PRIORITY(1)

NORM_PRIORITY(5)——默认优先级,如果未指定优先级,会使用默认优先级

MAX_PRIORITY(10)

如果应用设置的线程优先级超出取值范围(1—10),会抛出 IlegalArgumentException异常

(2)另一种方式是使用android.os 包里的Process.setThreadPriority()

它基于Linux的优先级,从 -20(最高)到 19(最低)

定义了8个优先级:

THREAD_PRIORITY_AUDIO (-16)

THREAD_PRIORITY_BACKGROUND (10)

THREAD_PRIORITY_DEFAULT (0)

THREAD_PRIORITY_DISPLAY (-4)

THREAD_PRIORITY_FOREGROUND (-2)

THREAD_PRIORITY_LOWEST (19)

THREAD_PRIORITY_URGENT_AUDIO (-19)

THREAD_PRIORITY_URGENT_ DISPLAY (-8)

还可以使用Process.THREAD_PRIORITY_LESS_FAVORABLE (+1) 和 Process.THREAD_PRIORITY_LESS_FAVORABLE (-1)

如想把线程优先级设置的比默认高。则可以用(THREAD_PRIORITY_DEFAULT  + THREAD_PRIORITY_LESS_FAVORABLE)

用这种方式,而不是你直接+1、 -1,是因为+1有时候意味着提高优先级,有时则是降低优先级。

注:不要混用Thread.setPriority 和 Process.setThreadPriority。因为Thread和Linux中的优先级定义不同。

注:改变线程优先级必须非常小心。增加优先级可能加快这个线程的人物执行速度,但会对别的线程造成负面影响,影响整体体验。

可以考虑 优先级老化算法。

再次强调:后台线程更新用户界面,必须反馈给主线程处理,View的方法只能在UI线程中调用。

"原子操作(atomic operation)是不需要synchronized",这是Java多线程编程的老生常谈了。

所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程)。

一个操作是原子的(atomic),如果这个操作所处的层(layer)的更高层不能发现其内部实现与结构。
原子操作可以是一个步骤,也可以是多个操作步骤,但是其顺序是不可以被打乱,或者切割掉只执行部分。
视作整体式原子性的核心。

《Android应用性能优化》 第5章 多线程和同步的更多相关文章

  1. Android应用性能优化(转)

    人类大脑与眼睛对一个画面的连贯性感知其实是有一个界限的,譬如我们看电影会觉得画面很自然连贯(帧率为24fps),用手机当然也需要感知屏幕操作的连贯性(尤其是动画过度),所以Android索性就把达到这 ...

  2. 包建强的培训课程(9):Android App性能优化

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  3. Android开发性能优化总结(一)

    安卓开发应用首先要讲究良好的用户体验,如果一款软件卡顿现象严重,不流畅,经常崩溃,那么将给用户带来极不良好的体验,从而损失用户. 在实际开发和学习中,我总结了一下关于安卓性能的优化,供大家参考交流. ...

  4. Android客户端性能优化(魅族资深工程师毫无保留奉献)

    本文由魅族科技有限公司资深Android开发工程师degao(嵌入式企鹅圈原创团队成员)撰写,是degao在嵌入式企鹅圈发表的第一篇原创文章,毫无保留地总结分享其在领导魅族多个项目开发中的Androi ...

  5. Android APP 性能优化的一些思考

    说到 Android 系统手机,大部分人的印象是用了一段时间就变得有点卡顿,有些程序在运行期间莫名其妙的出现崩溃,打开系统文件夹一看,发现多了很多文件,然后用手机管家 APP 不断地进行清理优化 ,才 ...

  6. Android app 性能优化的思考--性能卡顿不好的原因在哪?

    说到 Android 系统手机,大部分人的印象是用了一段时间就变得有点卡顿,有些程序在运行期间莫名其妙的出现崩溃,打开系统文件夹一看,发现多了很多文件,然后用手机管家 APP 不断地进行清理优化 ,才 ...

  7. android app性能优化大汇总

    这里根据网络上各位大神已经总结的知识内容做一个大汇总,作为记录,方便后续“温故知新”. 性能指标: (1)使用流畅度:  图片处理器每秒刷新的帧数(FPS),可用来指示页面是否平滑的渲染.高的帧率可以 ...

  8. Android应用性能优化系列视图篇——隐藏在资源图片中的内存杀手

    图片加载性能优化永远是Android领域中一个无法绕过的话题,经过数年的发展,涌现了很多成熟的图片加载开源库,比如Fresco.Picasso.UIL等等,使得图片加载不再是一个头疼的问题,并且大幅降 ...

  9. 《Android应用性能优化》2——内存、CPU、性能测评

    4.高效使用内存 4.1 说说内存 Android设备的性能主要取决于以下三因素: CPU如何操纵特定的数据类型: 数据和指令需占用多少存储空间: 数据在内存中的布局 4.2 数据类型 int和lon ...

  10. (转) Android开发性能优化简介

    作者:贺小令 随着技术的发展,智能手机硬件配置越来越高,可是它和现在的PC相比,其运算能力,续航能力,存储空间等都还是受到很大的限制,同时用户对手机的体验要求远远高于PC的桌面应用程序.以上理由,足以 ...

随机推荐

  1. windows7下cmd窗口使用ssh命令

    http://jingyan.baidu.com/article/36d6ed1f931eb31bcf4883dc.html

  2. WPF中如何在文本外面加虚线外框

    WPF中如何在文本外面加虚线外框 昨天突然被问到如何在wpf里面给一段文本加个虚线外框,由于有一段时间没玩wpf了,一时还真没想出来,虽然大概有个思路,但是也不保证正确.今天回到家,闲着没事情也就随便 ...

  3. 05-THREE.JS 产生大雾的效果

    <!DOCTYPE html> <html> <head> <title></title> <script src="htt ...

  4. Linux centos 6.5 搭建 svn服务器

    实例:web1 1.安装subversion #yum install subversion #mkdir -p /oop/svn/ //创建svn目录 #chmod -R 777 /oop/svn ...

  5. 剑指offer--16.数组中重复的数字

    时间限制:1秒 空间限制:32768K 热度指数:198342 本题知识点: 数组 题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复 ...

  6. 7.MySQL优化---存储过程和存储函数

    转自互联网. 当一个大型系统在建立时,会发现,很多的SQL操作是有重叠的,个别计算是相同的,比如:业务系统中,计算一张工单的计算方式.当遇到这些情况时,我们运用存储过程就是一个非常棒的优化啦.那么,什 ...

  7. Object 的一个问题

    var s1 = 'abc';     s1 instanceof String //false var s2 = new String('abc');     s2 instanceof Strin ...

  8. js改变select的选中项不触发select的change事件

    // test var selectEl = document.querySelector('select') var buttonEl = document.querySelector('butto ...

  9. Long Jumps(二分查找lower_bound()函数的运用)

    Valery is a PE teacher at a school in Berland. Soon the students are going to take a test in long ju ...

  10. php处理redis

    1,connect 描述:实例连接到一个Redis.参数:host: string,port: int返回值:BOOL 成功返回:TRUE;失败返回:FALSE 示例: 1 2 3 4 5 <? ...