使用Timer删除视图时为什么应用程序崩溃?

时间:2013-05-26 06:18:23

标签: java android

我对Andriod的发展很新。我正在尝试使用Timer(来自java.util)在onCreate之后1秒删除一个视图,这就是我写的。

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时崩溃会很棒。

1 个答案:

答案 0 :(得分:3)

  

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

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

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

我建议使用postDelayed()View上的方法,例如ImageView)而不是Timer,因为这可以避免后台线程的开销并解决您的问题问题