活动完成后停止 Handler Runnable

use*_*637 3 java multithreading android runnable

我有一种方法可以让 TextView 充当“正在加载...”指示器。

我正在用一个 Runnable 来做这件事,它每 0.5 秒更新一次 TextView。这是我的功能:

public void displayFlash() {
    animate = true;
    Handler handler = new Handler();
    Runnable runnable = new Runnable() {
        public void run() {
            while(animate) {
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                handler.post(new Runnable() {
                    public void run() {
                        System.out.println("Running");
                        numFrames++;
                        switch (numFrames % 3) {
                        case 0:
                            loading.setText("Loading.");
                            break;
                        case 1:
                            loading.setText("Loading..");
                            break;
                        case 2:
                            loading.setText("Loading...");
                            break;

                        }
                    }
                });
            }
    }
    };
    new Thread(runnable).start();
}
Run Code Online (Sandbox Code Playgroud)

问题是,在此活动完成(并销毁)后,线程继续运行。我System.out.println("running");在 Runnable 中有一个,并且在此活动完成后继续记录。我需要做什么才能杀死它?我曾尝试handler.removeCallbacks(runnable);Thread.interrupt();没有运气。

Gen*_*kin 5

public void displayFlash() {
    animate = true;
    final Handler handler = new Handler();
    Runnable yourRunnable = new Runnable() {
        @Override
        public void run() {
            System.out.println("Running");
            numFrames++;
            switch (numFrames % 3) {
                case 0:
                    loading.setText("Loading.");
                    break;
                case 1:
                    loading.setText("Loading..");
                    break;
                case 2:
                    loading.setText("Loading...");
                    break;
            }
            handler.postDelayed(this, 500);
        }
    }
    handler.post(yourRunnable);
}
Run Code Online (Sandbox Code Playgroud)

完成后,请致电 handler.removeCallbacks(yourRunnable);