2016-07-12 15 views
1

私は最近JAVA/Androidを学び始めて、面白いものを見つけました。私はその方法でうまくいくAppを作りたかったのですが、小さな問題が1つあります。私は多くの操作を持つアプリを作った。非常に多くのGUIがフリーズします(PC /スマートフォン)。たとえば、私は10000エポックを持ち、この中にfors(Evolutionaryアルゴリズム)を使用する多くの関数があります。私はProgressBarを使用しています。問題は、私がアプリケーションを起動するときにプログレスバーがフリーズすることです。あなたが見ることができるように、ボタンがありAndroid Java GUIフリーズ/ w ProgressBar

Evolutionary

のようにアプリがどのように見えるか、私はあなたを見ることができます。私はこのボタンですべてを起動します。だから問題は、プログレスバーを動かす方法はありますか?私は、プログレスバーに実際のエポックと最大エポックを最終値として表示したいだけです。 スレッドを作ろうとしましたが、うまくいかず、デリゲートを試みましたが、どちらもうまくいきませんでした。

ありがとうございました。

+0

を使用してバックグラウンドスレッドでの実行時間の長いタスクを実行 'progresbarはwork'はい、[AsyncTask]使用するようにする方法(https://developer.android.com/reference/android/はありますos/AsyncTask.html) –

答えて

3

AsyncTaskを使用します。 UIスレッドで長時間実行すると、スレッドブロックとスレッドがUIを更新できなくなるため、プログレスバーが増加したり読み込まれたりしていないことがわかります。だから、AsyncTaskまたはThread Pool Executor

package com.test; 

import android.app.Activity; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.provider.Settings.System; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 
import android.view.View.OnClickListener; 

public class AsyncTaskActivity extends Activity { 
    Button btn; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     btn = (Button) findViewById(R.id.button1); 
     btn.setOnClickListener((OnClickListener) this); 
    } 

    public void onClick(View view){ 
     new LongOperation().execute(""); 
    } 

    private class LongOperation extends AsyncTask<String, Void, String> { 
     @Override 
     protected String doInBackground(String... params) { 
      for(int i=0;i<5;i++) { 
       try { 
        Thread.sleep(1000); 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 

      return null; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      TextView txt = (TextView) findViewById(R.id.output); 
      txt.setText("Executed"); 
     } 

     @Override 
     protected void onPreExecute() { 
     } 

     @Override 
     protected void onProgressUpdate(Void... values) { 
     } 
    } 
} 
関連する問題