Android - 使用其他线程的值更新进度条

时间:2014-11-21 07:04:21

标签: android multithreading

我有一个可以生成迷宫的应用。在迷宫生成期间,我想更新进度条。但是,我看不出这样做的好方法。进度条在一个线程上运行,而迷宫生成在另一个线程上运行。如何使两者来回传递一个简单的int?对不起,如果这是一个糟糕的问题,我是这方面的初学者。

protected void incrementProgress() throws InterruptedException {
    generateMaze(); //Generates the maze by launching a new thread
    while(progressBarStatus < 100) {
        progressBarStatus = maze.getIntPercentDone(); //This does not get updated
        Thread.sleep(10);

        progressBarHandler.post(new Runnable() {
            @Override
            public void run() {
                progressBar.setProgress(progressBarStatus);
            }
        });
    }
    if (progressBarStatus >= 100) { //This condition does not get met 
        Thread.sleep(100);
        progressBar.dismiss();
    }
}

/**
 * Dummy maze generation method that has a counter to simulate progress
 * @return
 */
protected void generateMaze() { //Method that builds a maze
    mazeBuilder.build(maze, Constants.SKILL_X[0], Constants.SKILL_Y[0], Constants.SKILL_ROOMS[0], Constants.SKILL_PARTCT[0]);
    try {
        mazeBuilder.buildThread.join();
    }
    catch (InterruptedException e) {
        mazeBuilder.buildThread.interrupt();
    }
}

1 个答案:

答案 0 :(得分:0)

理想情况下,您的进度条应位于主线程中。可以使用Asyctask完成迷宫生成。 Asynctask是在android框架提供的不同线程上执行任务的绝佳方法,并且内置了将更改发布到主线程的方法。

您可以了解AsyncTask hereherehere

对于前进,一旦你创建了一个扩展Asynctask的类,你可以

  1. 在doItInBackground()方法中创建迷宫创建(长时间运行的任务),
  2. 并通过从doItInBackground()方法定期调用publishProgress()来发布迷宫创建的进度, 并传递进度(可能以整数值表示 完成百分比)。
  3. publishProgress()实际上将值传递给onProgressUpdate()方法。从此方法,您可以发布收到的进度更新 到主线程。
  4. 现在使用更新的整数进度值更新主线程中的进度对话框。