如题。
我是在menu按钮中添加的事件
代码如下
[Toast.makeText(MenuActivityActivity.this, "开始下载程序",
Toast.LENGTH_SHORT).show();
System.out.println("caseTouch");
System.out.println("1");
System.out.println("2");
System.out.println("3");
System.out.println("4");
try {
Thread.sleep(2000);
System.out.println("try...........");
} catch (InterruptedException e) {
System.out.println("SLEEP EXCEPTION");
e.printStackTrace();
System.out.println("catch");
}
各种System.out都打印出来了,toast也没出来,而且点击menu按钮调出的item后。感觉程序像是卡了一样,卡的事件就是sleep时间,请问怎么回事……在线等~谢谢各位咯~

解决方案 »

  1.   

     Thread.sleep(2000); 你让UI线程睡了两秒,这两秒内界面就不会更新。所以就是卡了的效果。你让它睡的时间再长点就会anr了。。
      

  2.   

    你应该好好理解理解Thread.sleep()的含义了
    当前线程被挂起2S,意味着它是暂时放弃了cpu 2S,放弃了cpu,那么你的show()动作自然也被取消了
    如果你是先挂起线程,再show()的话,效果就不一样了,你可以试一试
      

  3.   

     Toast.LENGTH_SHORT     把这个参数改成10
      

  4.   

    因为Toast是慢慢显示出来的, 当你让它显示toast的时候刚好准备要显示Toast了但主线程因为Sleep了所以被卡住所以错过了Toast显示的时间,当主线程醒来时Toast消失的时间也到了(虽然理论上说中间差了一秒) , 所以把Toast的显示时间设长点应该可以看到Toast效果
      

  5.   


    我明白的你的意思了
    我想请问另外一个话题,10是10秒的意思吗?还是什么单位……Android不通常都是毫秒为单位吗?
    另外,length和short各分别代表多少秒的显示时间呢?
    tks~
      

  6.   


    请问这睡……toast是不是已经显示了一点点,但是只不过肉眼看不出来呢?
      

  7.   


    那就是2秒后在show了吧……我貌似是忽略了些什么。那有没有什么方法能祈祷代码暂停的作用……我想让toast正常显示,你有什么好的方法吗?因为代码走的太快了……你懂得……
      

  8.   

    Toast....show();
    new Timer().schedule(new TimerTask() {
    @Override
    public void run() {
      //这里是2S后执行的代码
    }
    }, 2 * 1000);
      

  9.   

    也就是说括号内的内容会在show之后运行。
    那请问他的2秒是在什么时候开始计算的呢?
    toast展示出以后?还是消失以后?还是说同时进行,只是2秒的sleep不影响toast.show……
    谢谢!
      

  10.   

    这种方法并没有让程序挂起,它只是开了一个时间任务。
    Toast....show();
    new Timer().schedule(new TimerTask() {
    @Override
    public void run() {
    //这里是2S后执行的代码
    }
    }, 2 * 1000);
    //如果这里有代码,程序还是会继续执行的
    它是从toast show出来后开始计算的。
    总的来说,代码还是像以前一样,从上而下执行,执行完toast show之后,遇到时间任务(此时开始计时),但并不是立即执行run{}里面的代码,而是继续执行时间任务后面的代码。等到2S之后,程序会执行Run{}里面的代码,注意的是它并不会影响原来主程序的执行,因为run{}部分被放在了新开的一个线程之内