2011-03-27 22 views
1

爲什麼我只看到「第一」烤麪包,而不是從我的線程創建的其他人(應該)?活動忽略顯示從我的線程執行Toast

public class BannerExample extends Activity { 

    @Override 
    public void onCreate(final Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     Toast toast = Toast.makeText(this, "first toast", Toast.LENGTH_SHORT); 
     toast.show(); 

     new MyThread(this).start(); 

    } 

    class MyThread extends Thread { 

     private Context context; 

     public MyThread(Context context) { 
      this.context = context; 
     } 

     public void run() { 

      Looper.prepare(); // An exception told me to add this - i have no clue why 

      for (int i = 0; i < 3; i++) { 

       try { 
        sleep(1000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 

       Toast toast = Toast.makeText(context, i + "whoho", Toast.LENGTH_SHORT); 
       toast.show(); 
      } 

     } 

    } 

} 

回答

1
  1. 你不應該叫Looper.prepare。你都拿到了異常,因爲你做錯了什麼:
  2. 祝酒詞是UI工具包的一部分,因此必須從UI線程訪問 - 這就是爲什麼你得到一個例外
  3. 我建議你換ThreadAsyncTask並使用onProgressUpdate方法創建您的吐司,因爲這會自動在UI線程上運行。否則,你需要使用一個處理程序。
  4. 傳球getBaseContext的背景下,而不是上下文從當前的活動到你的構造
+0

真棒,謝謝! – corgrath 2011-03-27 21:09:31