2015-08-06 4 views
0

Вот сделка, мне нужно запустить операцию и показать индикатор выполнения во время его запуска. Я решил, что мне нужно запустить обновление строки выполнения в другом потоке, потому что, если я этого не сделаю (я попробовал), панель не обновляется до конца операции. Я написал код ниже, однако он не работает, вместо этого сбой приложения. Я считаю, что проблема связана с синхронизацией потоков, но я не уверен (во второй раз работая с потоками Java, пожалуйста, пощадите меня, я все еще новичок). Это работает на Android.Связь с потоком Android для диалога прогресса

Можете ли вы обнаружить какую-либо незаконную операцию, о которой я не знаю? Благодаря!

ProgressDialog progress; //Global, declared somewhere else 


final Object flag = new Object(); 
Thread progressThread; 
//More Code... 

progress.show(); 
progress.setMax(auxMobile.size() + auxStatic.size()); 
progress.setProgress(0); 

progressThread = new Thread(new Runnable() { 
    @Override 
    public void run() { 
     try { 
      synchronized (flag) { 
       while (progress.getProgress() < progress.getMax()) { 
        progress.incrementProgressBy(1); 
        flag.wait(); 
       } 
      } 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
     } 
    }); 
progressThread.start(); 



try { 

    for(int i=0; i<auxStatic.size(); i++) { 
     //More Code... 
     flag.notify(); 
    } 

    for(int i=0; i<auxMobile.size(); i++){ 
     //More Code... 
     flag.notify(); 
    } 



    } catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

ответ

0

В этом случае вам действительно следует использовать AsyncTask. Проверить this, this.

Это сделает вашу жизнь для этого случая намного проще!

Смежные вопросы