2017-05-24 4 views
0

Ich versuche, eine Anwendung zu machen, die laufende Anwendungen Eigenschaften (Prozessnamen, Ikonen, Gedächtnis usw.) erhält und sie in listview anzeigt.Wie kann Android Ladezeit mit Threads reduziert werden?

Da ich sie im Hauptthread ausführe, dauert dies zu viel Zeit. Wie kann ich mehr Threads in dieser Beispielschleife erstellen? mit task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR) oder verwenden mehrere Threads für die Verarbeitung parallel (Ich bin neu in Android-Programmierung)

//would like to run this loop in parallel 
for (int i = 0; i < processes.size(); i++) { 
// calculations 
} 

Antwort

0

Versuchen mehrere AsyncTasks und führen Aufgaben mit.

AsyncTask

new AsyncTask<Void, Void, Void>() { 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     //would like to run this loop in parallel 
     //You can also start threads 

     for (int i = 0; i < processes.size(); i++) { 
      // calculations 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void aVoid) { 
     super.onPostExecute(aVoid); 
    } 
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 

Mit Themen

Thread thread1 = new Thread(new Runnable() { 
    @Override 
    public void run() { 
     for (int i = 0; i < processes.size() /2; i++) { 
     // calculations 
     } 
    } 
}); 

Thread thread2 = new Thread(new Runnable() { 
    @Override 
    public void run() { 
     for (int i = processes.size() /2; i < processes.size(); i++) { 
     // calculations 
     } 
    } 
}); 

thread1.start(); 
thread1.start(); 
+0

danke Ihnen für Ihre Antwort .. Ich habe versucht, Ihre beiden Methoden, aber es zeigen Liste nicht in AsyncTask und Abstürze in Fäden. –

0
Hi I think you have one loop to iterate which is the data got from any Web Service. 

- Basically all the long running process which are need for UI changes can be run inside the AsyncTask, which will create background threads. 

class AsyncExaple extends AsyncTask<Void, Void, Void>{ 

    @Override 
    protected Void doInBackground(Void... params) { 

     //What ever the long running tasks are run inside this block 
     //would like to run this loop in parallel 
     for (int i = 0; i < processes.size(); i++) { 
// calculations 
     } 
     return null; 
    } 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 
    @Override 
    protected void onPostExecute(Void aVoid) { 
     super.onPostExecute(aVoid); 
    } 
}; 


To call this AsyncTask do as follows 

AsyncExaple asyncExaple = new AsyncExaple(); 
asyncExaple.execute(); 


If you still want to use the Threads use below code: 

new Thread(new Runnable() { 
      @Override 
      public void run() { 

      } 
     }).start(); 
Verwandte Themen