当我将setContentView放入线程中时,它在仿真器中运行时崩溃。应用程序崩溃时将setContentView放入仿真器的线程类中
new Thread(){
public void run() {
setContentView(R.layout.main_layout);
}
}.start();
当我将setContentView放入线程中时,它在仿真器中运行时崩溃。应用程序崩溃时将setContentView放入仿真器的线程类中
new Thread(){
public void run() {
setContentView(R.layout.main_layout);
}
}.start();
你可以试试...
runOnUiThread(new Runnable(){
public void run() {
setContentView(R.layout.main_layout);
}});
..但要小心,因为该公约是做setContentView(..);
在onCreate()
上的默认线程那里。
谢谢,它的工作原理。但我的目标是通过使用线程显示对话框并在后台加载布局。我也提出了一个新的问题 – Maneesh 2010-04-15 12:46:09
这是因为setContentView无法从非UI线程调用。
应该在屏幕上显示的内容只能在UI线程中调用。其他线程无法访问UI元素。如果你想一旦你的后台线程完成在屏幕上显示的东西,或从后台通知的东西线程可以使用处理器:
new Thread(new Runnable(){
public void run(){
//to do task in thread
Message msg=new Message();
msg.what=10;//specify some message content to check from which thread u r receiving the //message
handler.sendMessage(msg);
}
}).start();
,并在处理程序:
Handler handler=new Handler(){
void handleMessage(Message msg){
if(msg.what==10){
//carry out any UI associaed task that you want
}
}
};
这种方法将确保在任何应该在后台运行的线程不会干扰UI线程,UI不会变慢,并且可以通过此方法更新UI /显示对话框。
runInUIThread()方法会将线程置于UI中,并且如果您的线程正在下载网络数据或从磁盘写入/读取数据,UI可能会变慢。
希望这会有所帮助。
为什么在一个线程中? – 2010-04-15 12:30:45
显示对话框并在后台加载第二个布局。 – Maneesh 2010-04-15 12:45:14