2016-07-12 4 views
1

J'ai récemment commencé à apprendre JAVA/Android et j'ai trouvé quelque chose d'intéressant. Je voulais faire une application, qui d'ailleurs fonctionne bien, mais j'ai un petit problème. J'ai fait une application qui a beaucoup d'opérations. Tant de choses que GUI gèle (PC/Smartphone). Par exemple, j'ai un temps qui a 10000 époques et à l'intérieur de ce temps sont nombreuses fonctions qui utilisent fors (algorithme évolutionnaire). J'utilise ProgressBar. Le problème est que la barre de progression se fige lorsque je démarre l'application. Je peux vous montrer comment l'application ressembleAndroid Java GUI geler/w ProgressBar

Evolutionary

Comme vous pouvez le voir, il y a un bouton. Je lance le tout avec ce bouton. Donc la question est, Y at-il un moyen de faire du progresbar de travail? Je veux juste que la barre de progression montre l'époque actuelle et les époques maximales comme valeur finale. J'ai essayé de créer un fil mais je n'ai pas travaillé et j'ai essayé de déléguer aussi mais je n'ai pas travaillé non plus.

Merci pour l'aide les gars.

+0

'Est-il possible de faire progresbar work' Oui, utiliser [AsyncTask] (https://developer.android.com/reference/android/ os/AsyncTask.html) –

Répondre

3

Utiliser AsyncTask. Comme lorsque vous exécutez une tâche longue durée dans le thread UI, le bloc de threads et le thread ne seront pas en mesure de mettre à jour l'interface utilisateur. Ainsi, vous verrez que la barre de progression n'augmente pas ou ne se charge pas. Donc, faire la longue tâche en cours d'exécution dans le thread d'arrière-plan à l'aide AsyncTask ou 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) { 
     } 
    } 
}