java - 为什么使用计时器删除 View 时应用程序崩溃?

标签 java android

我对 Andriod 开发非常陌生。我正在尝试使用计时器(来自 java.util)在 onCreate 后 1 秒删除 View ,这就是我所写的。

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);
}

不太清楚为什么,但我的应用程序每次都会崩溃。

计时器似乎有问题。我尝试删除计时器并在 OnCreatee 中添加 startup.setVisibility(View.GONE); ,效果很好。

    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 时崩溃,那就太好了。

最佳答案

Not exactly sure why but my app crashes everytime unless I remove the timer and remove the view instantly.

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

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

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

关于java - 为什么使用计时器删除 View 时应用程序崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16756737/

相关文章:

java - 来自 adb install 的 INSTALL_PARSE_FAILED_NO_CERTIFICATES;使用Java 6、Android 5.0.2

java - Activity 不显示 onClick

android - Adapter 和 AdapterView 之间的契约

java - 在 Android 中使用 Intent 和 Bundle 处理整数

java - 如何在 Java 8 中的 lambda 调用中打印到控制台

java - Apache Flink 中的空窗口

java - 如何使用 Java 的 String.replaceAll 方法替换以 $ 字符开头的字符串

java - 同时使用 Button 和 Tab?

java - 使用外部文件的内容作为 pom.xml 中的版本值

java - 数据库中已删除对象的 Hibernate 刷新 session