當我將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