2016-08-29 19 views
1

私はAsyncTaskを実行しており、このスレッドでは私のビューを操作するためにrunOnUiThreadを開始します。 AsyncTaskを閉じると、AsyncTaskを閉じた後もrunOnUiThreadが1時間長く実行されます。どうすればrunOnUiThreadを閉じることができますか?ありがとう!閉じるrunOnUiThread

@Override 
protected String doInBackground(String... params) { 
    while(running.get()) { 

     // Background thread sleeps 
     try { 
      Thread.sleep(produceRadwaste_countdown * 1000); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 

     // UI thread touching some view elements 
     activity.runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       radwasteTon.incrementStack(); 
      } 
     }); 

     // Delete thread if player is game over 
     if(GameLogic.isGameOver()) { 
      clearThreads(); 
     } 
    } 

    return "Running"; 
} 

public void clearThreads() { 
    running.set(false); 
    this.cancel(true); 
} 

答えて

2

私は別の解決策を提案できますか?

AsyncTaskでonProgressUpdate(Params ...)メソッドを実装します。次に、doInBackground(Params ...)からpublishProgessを呼び出すことができます。

onProgressUpdate(Params ...)はUIスレッドで実行されます。

+0

私はrunOnUiThreadは必要ありませんが、スレッドをキャンセルした後も1回実行します – Ghork

+1

これでlogcatを使用してプロセス全体をチェックしました。 boolean以上のゲームをチェックする前にpublishProgress()を呼び出し、publishProgress()を実行する前にbooleanをチェックすることがあります。今私はこれら両方の操作の間に少しThread.sleepをやっていますが、これはうまく動作しますが、これは最善の解決策ではないと思います。 – Ghork

+0

私はAsyncTaskに最大プールサイズがあり、このゲームは非常に悪いことだと読んでいます。このスレッドは各ゲームアイコン上で実行されるため、約5〜10個のアイテムがあります。 – Ghork

関連する問題