将setContentView放入模拟器中的线程类时应用程序崩溃

时间:2010-04-15 12:21:18

标签: android android-emulator

当我将setContentView放在线程中,如下所示,它在模拟器中运行时崩溃。

      new Thread(){
          public void run() {           
               setContentView(R.layout.main_layout);
          }  
      }.start();

3 个答案:

答案 0 :(得分:3)

这是因为无法从非UI线程调用setContentView。

答案 1 :(得分:2)

你可以试试......

runOnUiThread(new Runnable(){

  public void run() {
    setContentView(R.layout.main_layout);

  }});

..但要小心,因为约定是在那里的默认线程setContentView(..); onCreate()。{/ p>

答案 2 :(得分:0)

应该在屏幕上显示的内容只能在UI线程中调用。其他线程无权访问UI元素。如果您想在后台线程完成后在屏幕上显示某些内容或从后台线程通知某些内容,您可以使用handler:

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 / show对话框。

runInUIThread()方法会将线程置于UI中,如果您的线程从网络下载数据或从/向磁盘写入/读取,UI可能会变慢。

希望这有帮助。