package cc.line;import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;public class line extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
handler.post(line);
setContentView(R.layout.main);
System.out.println("main"+Thread.currentThread().getId());
}
Handler handler=new Handler();
Runnable line=new Runnable() {
public void run() {
System.out.println("run"+Thread.currentThread().getId()); try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
}为什么输出的先是main,后是run
setContentView(R.layout.main);这句话是在handler.post()后面运行的,在Activity显示之前main就输出了 这是为什么?
解决方案 »
- 有些客户android手机重新启动不能运行
- 各位大神,开发移动广告SDK,向多盟,有米之类的需要多少人马啊,需求怎样的架构师和人员
- android手机飞行模式无法关闭,求解
- android多点触摸问题
- 另外个关于更新的问题
- super.onDestroy(); 的问题。
- mx2 alertdialog 挡住了smartbar,怎么办?
- eclipse 内存不足
- json解析异常
- 关于android游戏开发、jbox2d、cocos2dx???????????????????????????????????????????????????
- 自己为什么没想到呢。 android
- 在android程序中,如何对一个视频进行加密解密
不知道别的朋友是怎么理解的。
HandlerThread ht = new HandlerThread("King");
ht.start();
handler = new Handler(ht.getLooper())
2.handler.post(line) 是把line 这个runnalbe 发送到 UI线程的消息队列中。而消息队列是先进先出的。
3.在line到达UI的消息队列之前,已经有一个消息在执行了。这就是 UI主线程在执行,其执行顺序是:
onCreate()-> onStart()-> onResume() ->run
只有到达run区域时, 才会从消息队列取出新的信息,进行操作。所以无论你把 handler.post(line)放在哪里,都先看到main 然后才是line楼主可将
System.out.println("run"+Thread.currentThread().getId()); try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
放到onCreate方法里,试试就知道了。
你是先停了10秒再setContentView的吧
2.1的avd运行2.1的工程没问题,2.2的avd运行2.2的工程一直停留再开机界面,控制台一直是
Waiting for HOME ('android.process.acore') to be launched...
哪位大侠帮我解决下啊
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}哥 sleep 是Thread类得一个静态方法啊
你在在onCreate中,就是让UI线程睡10秒啊
[/Quote]