2009-07-03 56 views
1

我想從運行方法彈出對話框,它給了我異常,Looper.prepare沒有調用,當我調用同樣的方法我沒有得到任何異常,但沒有彈出對話框顯示在控制檯上。正如我再次使用這種方式處理,從run()方法顯示對話框

handler = new Handler() { 
    public void handleMessage(Message msg) { 
     showDialog(DIALOG1_KEY); 
     // process incoming messages here 
    } 
}; 

我沒有得到任何異常,但仍然沒有運氣任何機構可以告訴我,我做的事情是錯誤的。

回答

3

很難從你提供的代碼片段中知道,但我認爲你錯誤地使用了Handler。

你需要做的是在它們的主線程上初始化一個新的Handler對象,例如將它定義爲一個字段變量。

private Handler handler = new Handler(); 

然後創建一個新Runnable,其中包括要在GUI線程上執行指令(但會從你的後臺線程的方法run調用)。

private Runnable runOnGUI = new Runnable() { 
    private void run() { 
    showDialog(DIALOG1_KEY); 
    } 
}; 

那麼你的run方法中,你需要使用handler對象來發表您的runOnGUI方法的GUI線程上。

private Runnable runInBackground = new Runnable() { 
    private void run() { 
    handler.post(runOnGUI); 
    // Do processing 
    } 
}; 
+4

您還可以使用自Android 1.1以來可用的runOnUiThread(Runnable)方法 - 它執行完全相同的事情,但約少1行代碼。 – 2009-07-05 20:30:08