【问题标题】:Repeated ProgressBar activity for set of tasks in AndroidAndroid中一组任务的重复ProgressBar活动
【发布时间】:2016-11-06 11:46:46
【问题描述】:

我是android新手,没有太多管理线程的经验。我正在开展一项活动,我想显示进度条 5 秒钟然后重复。在这 5 秒内,我将显示一些文本供用户处理文本。我想重复这个说N次。

目前,我有以下代码可用于 1 个此类进度。我尝试循环它,但它没有帮助,因为线程同时执行。我怎样才能重复这个N次?为了解决我的问题,我是否走在正确的道路上?

public class test extends Activity {

    private ProgressBar progressBar;
    private int progressStatus = 0;
    private TextView textView;
    private Handler handler = new Handler();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_loop);
        progressBar = (ProgressBar) findViewById(R.id.progressBar1);
        textView = (TextView) findViewById(R.id.textView1);
        progressBar.setScaleY(3f);
        // Start long running operation in a background thread

        for(int i=0; i<5; i++)
            Progress();

    }

    public void Progress(){
        new Thread(new Runnable() {
            public void run() {
                while (progressStatus < 100) {
                    progressStatus += 1;
                    // Update the progress bar and display the
                    //current value in the text view
                    handler.post(new Runnable() {
                        public void run() {
                            progressBar.setProgress(progressStatus);
                            textView.setText(progressStatus+"/"+progressBar.getMax());
                        }
                    });
                    try {
                        // Sleep for 200 milliseconds.
                        //Just to display the progress slowly
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }
}

【问题讨论】:

  • During those 5 seconds, I will display some text for the user to work on the text. ???处理 TextView 中显示的文本?用户应该如何处理它?
  • 不要同时启动五个线程。一个线程完成后启动下一个线程。或者让run()中的代码循环运行五次。
  • 用户看到五次进度有什么意义?
  • 我的意思是,我会测试用户的记忆力。我会将文本保留 5 秒钟。最后我会以某种方式对其进行测试。

标签: android multithreading android-progressbar


【解决方案1】:

我不确定我是否会推荐使用您所遵循的模式,但这是让线程一个接一个地运行而不是同时运行的方法:

public void progress(final int numberOfRuns) {
    if (numberOfRuns <= 0 ) {
        return;
    }
    new Thread(new Runnable() {
        public void run() {
            while (progressStatus < 100) {
                progressStatus += 1;
                // Update the progress bar and display the
                //current value in the text view
                handler.post(new Runnable() {
                    public void run() {
                        progressBar.setProgress(progressStatus);
                        textView.setText(progressStatus + "/" + progressBar.getMax());
                        // For the UI Changes. Eg update the loop number
                        myTextView.setText(Integer.toString(totalLoop));
                    }
                });
                try {
                    // Sleep for 200 milliseconds.
                    //Just to display the progress slowly
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            progressStatus = 0;
            totalLoop = totalLoop+1;
            progress(numberOfRuns - 1);
        }
    }).start();
}

然后只需调用progress(numberOfRuns),无需任何循环。

【讨论】:

  • 我收到了Variable progressStatus is accessed from the inner class, needs to be declared final。最后,我们可以在 at line `progressStatus +=1;
  • Aww shucks,很好的捕捉。我在函数中重新声明了progressStatus -_- 我正在更正代码。请注意。我在每次运行progress() 后重置progressStatus 的值,这样while 循环每次实际上都会从0 运行到100。
  • 我终于可以做到了。我刚刚用 UI 线程更新了你的答案。接受编辑,以便我可以接受答案。谢谢:)
  • 嘿,我还有一个问题。进入这个部分后,我无法摆脱它。即使我按下后退按钮,我也会在后台运行这个。除了调用progress(10),还有什么更好的管理方式?
  • 刚看到这个。我即将被解雇,但明天下午我可以看看这个。如果您需要更快的反馈,发布另一个问题可能是有意义的,如果您可以等待,我会在明天尝试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-24
  • 2011-01-31
  • 2017-03-27
  • 1970-01-01
相关资源
最近更新 更多