2013-05-26 26 views
0

我对Andriod开发非常陌生。我试图使用Timer(来自java.util)在onCreate后1秒删除一个视图,这是我写的。当Timer用于删除视图时,为什么应用程序崩溃?

Timer timer; 

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 

     timer = new Timer(); 
     timer.schedule(new TimerTask() { 
       @Override 
       public void run() { 
        ImageView startup = (ImageView) findViewById(R.id.startup); 
        startup.setVisibility(View.GONE); 
       } 
      }, 1000); 
} 

不完全确定为什么,但我的应用程序每次崩溃。

看起来定时器有问题。我尝试删除计时器,startup.setVisibility(View.GONE);OnCreatee,它工作正常。

protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      setContentView(R.layout.activity_main); 

      ImageView startup = (ImageView) findViewById(R.id.startup); 
         startup.setVisibility(View.GONE); 

    //Didn't crash at all!!! 
} 

这将是巨大的,如果有人能为什么在使用我的应用程序崩溃timer向我解释。

回答

3

不完全确定为什么,但我的应用程序每次崩溃,除非我删除计时器并立即删除视图。

使用LogCat检查与您的崩溃相关的Java堆栈跟踪。

您将看到您的异常是因为您正试图从后台线程修改UI。您的run()方法在由TimerTimerTask提供的后台线程上运行。

我建议使用(上View的方法,比如你ImageViewpostDelayed()代替Timer,因为这避免了后台线程的开销和解决您的问题。

+1

+1为简化postDelayed,我已经看到了几十个针对这个问题的过于复杂的解决方案。 –

相关问题