本问题,是看了《中文Android开发视频教学》中,第15讲的handler视频,产生的疑问!本代码目的:验证Handler对象同属于Activity线程中,并非新建一个线程!package com.android.test.testhandler;import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;public class TestHandler extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); handler.post(updateThread);
setContentView(R.layout.main);
System.out.println("Activity ID :" + Thread.currentThread().getId());
System.out.println("ActivityName :" + Thread.currentThread().getName());
}
Handler handler = new Handler();
Runnable updateThread = new Runnable() { @Override
public void run() {
// TODO Auto-generated method stub
System.out.println("Handler ID ----------:" + Thread.currentThread().getId());
System.out.println("HandlerName ----------:" + Thread.currentThread().getName());
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
}对System.out进行过滤,得到的结果如下:
05-11 06:39:06.267: INFO/System.out(344): Activity ID :1
05-11 06:39:06.325: INFO/System.out(344): ActivityName :main
05-11 06:39:06.445: INFO/System.out(344): Handler ID ----------:1
05-11 06:39:06.445: INFO/System.out(344): HandlerName ----------:main描述:
由于handler.post(updateThread); 先运行,接着执行 updateThread对象的run()方法,休眠10s时间,所以Activity的界面布局应该10s后才显示出来!即,setContentView(R.layout.main);这句话,10s后才运行!问题:为什么输出中,“Activity ID : 1” 先显示,而“Handler ID ----------:1”后显示呢?
import android.os.Bundle;
import android.os.Handler;public class TestHandler extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); handler.post(updateThread);
setContentView(R.layout.main);
System.out.println("Activity ID :" + Thread.currentThread().getId());
System.out.println("ActivityName :" + Thread.currentThread().getName());
}
Handler handler = new Handler();
Runnable updateThread = new Runnable() { @Override
public void run() {
// TODO Auto-generated method stub
System.out.println("Handler ID ----------:" + Thread.currentThread().getId());
System.out.println("HandlerName ----------:" + Thread.currentThread().getName());
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
}对System.out进行过滤,得到的结果如下:
05-11 06:39:06.267: INFO/System.out(344): Activity ID :1
05-11 06:39:06.325: INFO/System.out(344): ActivityName :main
05-11 06:39:06.445: INFO/System.out(344): Handler ID ----------:1
05-11 06:39:06.445: INFO/System.out(344): HandlerName ----------:main描述:
由于handler.post(updateThread); 先运行,接着执行 updateThread对象的run()方法,休眠10s时间,所以Activity的界面布局应该10s后才显示出来!即,setContentView(R.layout.main);这句话,10s后才运行!问题:为什么输出中,“Activity ID : 1” 先显示,而“Handler ID ----------:1”后显示呢?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货