2014-11-21 43 views
0

我有一个生成迷宫的应用程序。在迷宫一代中,我想更新进度条。但是,我看不到一个好方法来做到这一点。进度条在一个线程上运行,而迷宫生成则在另一个线程上运行。我怎么让这两个来回传递一个简单的int?对不起,如果这是一个不好的问题,我是一个初学者。Android - 使用另一个线程的值更新进度条

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(); 
    } 
} 

回答

0

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

您可以了解有关AsyncTask hereherehere

对于抬起头来,一旦你创建扩展的AsyncTask一类,你可以

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

我已经看过一些例子,但是我不明白我们如何从mazebuilder将publishProgress()发布到活动中? – mrQWERTY 2014-11-21 07:52:00

+0

已更新的回答。你也可以阅读http://www.codeproject.com/Articles/580172/Asynchronous-Tasks-using-AsyncTask-另一个例子 – Arnab 2014-11-21 08:05:20