2013-10-28 90 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()会抛出一个异常。

相关问题