Starten Sie einen neuen thread innerhalb Asynchrone Aufgabe

Ist es möglich einen neuen thread starten, in eine Asynchrone Aufgabe?
So etwas wie dieses:

public class FirstActivity extends Activity {

protected ProgressBar progBar;
protected Intent intent;

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

    progBar = (ProgressBar)findViewById(R.id.start_progressBar);
    progBar.setProgress(0);
    new StartingApp().execute();
}

protected class StartingApp extends AsyncTask<Void, Integer, Void> {

    int myProgress;

    @Override
    protected void onPreExecute() {
        myProgress = 0;
    }

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

        while(myProgress<50){
            myProgress++;
            publishProgress(myProgress);
                SystemClock.sleep(10);
            }

        MyRunnableClass mrc = new MyRunnableClass();
        mrc.run();

        return null;    
    }

    @Override
    protected void onPostExecute(Void result){

        intent = new Intent(FirstActivity.this, SecondActivity.class);
        startActivity(intent);
    }

    @Override
    protected void onProgressUpdate(Integer... values) {

        progBar.setProgress(values[0]);
    }
}
}

MyRunnableClass ist eine Klasse implementiert Runnable.
Ich möchte so etwas wie dies, weil in der ersten übung möchte ich ein Fortschrittsbalken angezeigt, während die Anwendung initialisiert wird (fill-Daten-Strukturen, beginnend threads).

Andere Frage die ich habe ist: sollte ich die run() oder start () - Methode?

Vielen Dank im Voraus!

  • Bekommt man nicht einen neuen Thread, wenn Sie nur run() eine Runnable. Sie haben zu tun (new Thread(mrc)).start(); und ja, es ist möglich, aber warum willst du einen thread in einem thread?
  • Sie müssen nicht für einen Fortschritt. Ihr sind nur die Simulation ein Fortschritt. Vielleicht sollten Sie eine unbestimmte Fortschrittsleiste.
  • Also wenn ich mit run() oder start() für eine Runnable Klasse, was bin ich denn genau? Meine Idee war die Verwendung einer AsnycTask starten der worker-threads verwendet, die während des Lebenszyklus der Anwendung und wechseln Sie dann zur nächsten Aufgabe...
  • Ich weiß, ich bin nur zu simulieren, die Fortschritte, aber für jetzt ist dies nicht das Hauptproblem... Aber danke für den Vorschlag. Vielleicht werde ich verwenden unbestimmte Fortschrittsleiste, weil in der Tat ich nicht wissen, die Länge der Aufgabe.
  • wenn Sie run() es dann, der code wird nur ausgeführt, direkt in den thread, Sie sind in. Es ist nur eine Methode namens run, nichts mehr. Und dein thread ist bis run abgeschlossen ist. Wenn Sie start() einen thread, dann passiert nichts in deinem thread, außer Sie rufen eine Methode (die ist sofort beendet). Aber das wird ein thread erstellt, in dem der code dann ausgeführt wird (der neue Thread ruft automatisch run).
  • Auch wenn die Klasse implements Runnable, wenn ich nicht einen neuen thread starten mit new Thread(mrc).start() diese Klasse ist wie die andere "normale" Klasse, hab ich Recht?
  • yep, implements Runnable bedeutet nur, dass die Klasse einen run() Methode. Sie können diese Klasse verwenden jetzt laufen die run() in einem Thread, aber es ist nur noch eine normale Methode. Die Runnable - Schnittstelle ist es so, Thread weiss, dass es eine run() Methode, die Sie aufrufen können.
  • Ok. Jetzt habe ich verstanden! Danke 😉

InformationsquelleAutor amp | 2012-03-17
Schreibe einen Kommentar