码迷,mamicode.com
首页 > 移动开发 > 详细

《Android应用性能优化》 第5章 多线程和同步

时间:2015-04-15 16:53:50      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:

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线程中调用。

 

《Android应用性能优化》 第5章 多线程和同步

标签:

原文地址:http://www.cnblogs.com/maxiaodoubao/p/4428729.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!