首页 > 解决方案 > 可运行在 removeCallBacks 之后停止。如何重新启动可运行

问题描述

我正在开发一个小型运动计时器应用程序和 android 编程新手。除其他外,该应用程序显示了用户一个接一个地执行的活动,以及使用两个可运行文件的经过时间。在单击开始按钮时调用 runTimer()。当用户单击暂停按钮时,将调用 removeCallBacks。

问题是当用户暂停和恢复时,活动的显示不会恢复。如果在恢复时调用 runTimer(),我会看到经过的时间运行得很快,并且活动也很快显示出来,而不是一秒钟的延迟。

代码如下

   public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        myContext = binding.getRoot().getContext();
        defPackageR = myContext.getPackageName();

        binding.startButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                pT_status = true;
                running = true;
                elapsedTimeAtStart = SystemClock.elapsedRealtime();
                runTimer();
            }
        });

        binding.pauseButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                pT_status = false;
                running = false;
            }
        });

        binding.resumeButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                pT_status = true;
                running = true;
                // runTimer();
            }
        });
    }

runTimer如下

    public void runTimer(){

        final Handler handler = new Handler();
        final Handler handlertime = new Handler();

        handlertime.post(new Runnable() {

            @Override
            public void run() {

                // if running increment the seconds
                if (!running) {
                    handlertime.removeCallbacks(this);
                } else {
                    // do stuff to display elapsed time
                    seconds++;
                    handlertime.postDelayed(this, 1000);
                }
            }
       });


        handler.post(new Runnable () {

            @Override
            public void run() {

                if (pT_status) {
                        // do stuff here to display activities
                        handler.postDelayed(this, contentDuration);
                    } else {

                        handler.removeCallbacks(this);
                        handlertime.removeCallbacks(this);
                    }
            }
        });
    }

标签: androidrunnableandroid-handler

解决方案


推荐阅读