【问题标题】:ProgressBar running faster after each onclick in android在android中每次点击后ProgressBar运行得更快
【发布时间】:2015-01-16 17:48:23
【问题描述】:

我在 android 中被这个应用程序卡住了。在我的应用程序中,我正在尝试实现一个进度条,它显示特定秒数的计时器。单击按钮时,计时器应刷新并再次从进度条中的 0 开始。为此,我正在使用 Thread。

问题是,当我单击按钮时,线程调用计时器函数并且每次线程变得越来越快。我无法解决它,也不知道背景发生了什么。 这是我的 Timerfunction 代码

public void setTimer()
    {
        prog=0;
        progress.setProgress(prog);
        if(flag){
        t= new Thread(new Runnable(){
            public void run()
            {
              while(prog<100)
              {
                prog+=1;
                handle.post(new Runnable(){
                    public void run()
                    {
                        progress.setProgress(prog);
                        if(prog==progress.getMax()&& flag){
                         call_fun();
                        }
                    }
                });
                try
                {
                  Thread.sleep(time);
                }
                catch(InterruptedException e)
                {
                    Log.i("Error", null);
                }
              }
            }
        });
        t.start(); 
        }
    }

我在另一个名为 RandomGeneration 的函数中调用了这个函数。如果单击该按钮,则会调用随机生成,并且每次都会激活设置的计时器。但是每次点击后进度条运行得更快。它在相同的特定时间不断运行。例如,如果它在第一次单击时运行 3 秒,在第二次单击时运行 2 秒并且变得更快。

任何人都可以尝试找出这段代码中发生了什么。 提前谢谢..!!

【问题讨论】:

    标签: android multithreading timer android-progressbar thread-sleep


    【解决方案1】:

    据我所知,每次单击按钮时都会创建一个新线程。 也许尝试检查t 是否已经在运行,如果是,则更新将进度设置为0 的逻辑? 还有,if(flag) 是做什么的?

    【讨论】:

    • 感谢您的回复!!您可以从我的代码中看到,每次调用该函数时我都在设置 prog=0。并且标志是一个布尔值,如果答案正确,则此应用程序类似于测验,即标志为真。如果答案错误,则标志为假。这个测验作为一个计时器,应该运行一段时间。它应该刷新每个正确答案并显示新问题。
    • 那么我建议做这样的事情if ( t != null ) { return;} 你真的应该将prog 设置为 volatile(如果你还没有这样做的话)
    • 如果线程为空,那么它就完成了它的工作!我应该在哪里调用 if(t!=null ).. 你是在告诉我在 onclick 中调用它吗?在此之前你能解释一下为什么线程每次都运行得更快吗?
    • 您应该在t= new Thread(new Runnable()... 之前检查它是否为空,如果不查看完整代码,我无法肯定地说为什么它运行得更快,但也许有些线程没有获得 GC 并不断更新您的进度条.
    • 这能解决进度条加速问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 2014-01-30
    • 2012-09-13
    • 1970-01-01
    • 2014-01-30
    • 2013-03-23
    相关资源
    最近更新 更多