首页 > 解决方案 > 主线程上的 Android 处理程序使应用程序崩溃

问题描述

我是android开发的新手。我正在尝试在一个单独的线程上实现一个简单的任务,该线程在后台运行并定期更新 UI 组件。我的应用程序工作了一段时间并崩溃了。我使用了一个简单的 Handler+Runnable 机制。我知道有多种(和更好的)方法可以做到这一点,但我只是想了解为什么这不起作用。此外,任何关于我如何在未来自己解决问题的提示都将不胜感激。

public void EditUIComponent() {
        mainHandler = new Handler(Looper.getMainLooper());
        final Runnable textUpdateRunnable = new Runnable() {
            @Override
            public void run() {
                Log.i(TAG, "in Edit Text Runnable Countdown");
                for (int i = 10; i > 0; i--) {
                    String val = String.valueOf(i);
                    Log.i(TAG, "calculating countdown" + i + " Thread id" + Thread.currentThread().getId());
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    mainHandler.post(new Runnable() {
                        @Override
                        public void run() {
                            Log.i(TAG, "editing countdown" + val + " from thread id" + Thread.currentThread().getId());
                            editText.setText(val);
                        }
                    });
                }
            }
        };
        new Thread(textUpdateRunnable).start();
    }

 buttonStart.setOnClickListener(v -> {
     EditUIComponent();
 });

Logcat 有以下内容: I/rabackgroundap: Thread[6,tid=7696,WaitingInMainSignalCatcherLoop,Thread*=0xe6e0c410,peer=0x13100228,"Signal Catcher"]: 对信号 3 做出反应 I/rabackgroundap: 将堆栈跟踪写入 tombstoned

标签: javaandroidrunnableandroid-handlerandroid-debug

解决方案


推荐阅读