2013-10-28 129 views
0

在測試我的android應用程序代碼時,我注意到try塊中的第一條語句沒有執行。
這是我的代碼。try塊中的第一條語句未執行

try { 
     Toast.makeText(getApplicationContext(), "try block start", Toast.LENGTH_LONG).show(); 
     Thread.sleep(5000); 
     Toast.makeText(getApplicationContext(), "TRY after sleep", Toast.LENGTH_LONG).show(); 
     SmsManager smsManager = SmsManager.getDefault(); 
     smsManager.sendTextMessage("123", null, "ddd", null, null); 

    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     Toast.makeText(getApplicationContext(), "EXCEPTION CATCH", Toast.LENGTH_LONG).show();   
    } 

根本顯示第一個吐司「try block start」。

任何想法,我在哪裏誤認爲?

+2

永遠不會在UI線程上「睡眠」! – m0skit0

回答

1

嘗試刪除Thread.sleep(5000);一行。通過在主線程(這是UI線程)上使用睡眠,您實際上停止繪製UI 5秒(這超過了Toast顯示的時間)。

您應該避免在UI線程上使用睡眠(因爲它會導致您的UI掛起)。

+0

這是正確的,但你需要解釋原因。 – m0skit0

+0

@ m0skit0我加了一些解釋。 –

+0

+1進行解釋。 *「你通常應該避免在UI線程中使用睡眠」*我會說**從來沒有**在UI線程中使用睡眠,只是沒有意義。 – m0skit0

4

這是因爲你正在睡5秒。 您的用戶界面線程掛起,無法繪製吐司。 當睡眠時間過後,你的吐司時間也會過去。改爲嘗試Thread.sleep(500);

最後,不要在UI線程上使用Thread.sleep()。

0
Toast.makeText(getApplicationContext(), "try block start", Toast.LENGTH_LONG).show(); 

它將在UI線程上運行。如果你在Android 4.0的背景下,show()會拋出一個異常。

相關問題