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()
eineRunnable
. 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()
oderstart()
für eineRunnable
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 bisrun
abgeschlossen ist. Wenn Siestart()
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 automatischrun
). - Auch wenn die Klasse
implements Runnable
, wenn ich nicht einen neuen thread starten mitnew Thread(mrc).start()
diese Klasse ist wie die andere "normale" Klasse, hab ich Recht? - yep,
implements Runnable
bedeutet nur, dass die Klasse einenrun()
Methode. Sie können diese Klasse verwenden jetzt laufen dierun()
in einem Thread, aber es ist nur noch eine normale Methode. DieRunnable
- Schnittstelle ist es so, Thread weiss, dass es einerun()
Methode, die Sie aufrufen können. - Ok. Jetzt habe ich verstanden! Danke 😉
Du musst angemeldet sein, um einen Kommentar abzugeben.
Warum wollen Sie das tun?
Wie bereits in dem code, den Sie benötigen, rufen Sie new Thread(mrc).start() machen, damit es funktioniert. Ansonsten kann ich nicht sehen, kein problem, der code erzeugt einen neuen thread.