Chinaunix首页 | 论坛 | 博客
  • 博客访问: 655125
  • 博文数量: 171
  • 博客积分: 2246
  • 博客等级: 大尉
  • 技术积分: 1574
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-31 11:45
文章分类

全部博文(171)

文章存档

2018年(3)

2017年(4)

2015年(1)

2014年(20)

2013年(57)

2012年(86)

分类: 嵌入式

2012-08-15 11:31:05

  FROM:

在多线程编程这块,我们经常要使用HandlerThreadRunnable这三个类,那么他们之间的关系你是否
弄清楚了呢? 
       首先说明AndroidCPU分配的最小单元是线程,Handler一般是在某个线程里创建的,因而Handler
Thread就是相互绑定的,一一对应。 而Runnable是一个接口,ThreadRunnable的子类。所以说,
他俩都算一个进程。那么我们就来看看是怎么样实现的。

Java代码:

点击(此处)折叠或打开

  1. package eoe.handler;

  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.os.Handler;
  5. import android.os.SystemClock;

  6. public class HandlerTest extends Activity {
  7. private Handler handler = new Handler();
  8. public void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. // sendMessage();
  11. handler.post(r);
  12. setContentView(R.layout.main);
  13. //Thread t = new Thread(r);
  14. //t.start();
  15. System.out.println("activity--->" + Thread.currentThread().getId());
  16. System.out.println("activityname--->" + Thread.currentThread().getName());
  17. }

  18.     Runnable r = new Runnable(){
  19. @Override
  20. public void run() {
  21. // TODO Auto-generated method stub
  22. System.out.println("handler--->" + Thread.currentThread().getId());
  23. System.out.println("handlername--->" + Thread.currentThread().getName());
  24. try {
  25. Thread.sleep(10000);
  26. } catch (InterruptedException e) {
  27. // TODO Auto-generated catch block
  28. e.printStackTrace();
  29. }
  30. }
  31.     };

  32. }
在执行上面的代码后,发现HandlerTest等待了10秒后,才显示自己的主界面,而且在Runnable内打印的
线程id和UI线程打印的线程id相同!说明该程序中的Runnable是在UI线程中执行的,并没有创建新的线程!

常见的新建线程的方法是:

方法一:
Java代码:

  1. Thread thread = new Thread(); 
  2. thread.start();
复制代码

 方法二:
Java代码:

  1. HandlerThread thread = new HandlerThread("string"); 
  2. thread.start();
复制代码
阅读(2577) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

sunshine19922013-02-12 23:50:49

为什么会先打印activity里面的信息而后才打印run方法里面的信息呢??