Wie zu zwingen, Haupt-Acivity zu warten subactivity in Android?
Rufe ich eine subactivity aus der Haupttätigkeit. Diese subactivity nehmen sollten paar zahlen vom Benutzer (ich bin mit text Bearbeiten-Steuerelement um dieses zu erreichen), speichern Sie Sie auf statische variable in einer anderen Klasse und beenden. Ich will Haupttätigkeit warten subactivity aber beide sind nur gleichzeitig laufen. Auch doing sth mag das nicht hilft:
Thread t = new Thread(new Runnable(){
public void run(){
Log.v("==================", "run "+new Date());
startActivityForResult(new Intent(ctx,myCustomSubactivity.class),1);
} });
Log.v("==================", "calling run "+new Date());
t.start();
try {
t.join();
} catch (InterruptedException e) {Log.v("==================", "can't join");}
Log.v("==================", "back from activity "+new Date());
wissen Sie, wie Sie Kraft Haupttätigkeit zu warten? Thread.wait () - Methode ist unter Android nicht unterstützt(Programm-Fehler).
InformationsquelleAutor questioner | 2010-05-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stimme ich mit Nikolaj ist dies definitiv der android-Weg, dies zu tun.
Start der subactivity mit startActivityForResult in der sub-Aktivität verwenden setResult hinzufügen fügen Sie eine Ergebnis-code und eine Absicht mit all den zahlen, die Sie brauchen in den Daten-bundle.
In Ihrer ersten Aktivität überschreiben onActivityResult und ruft die zahlen aus der Absicht.
Wenn Sie die statische variable scheint dies einfacher, im ersten moment, aber es ist sehr unsicher und es gibt einige Fälle, das kann nicht funktionieren. Wenn Ihr Programm senden, um den hintergrund Ihrer Aktivitäten werden gespeichert, aber wenn das Telefon zur Neige geht auf Speicher das system schließen Sie Ihr Programm, und nachdem der Nutzer es sieht alles so aus, wie der moment, den die Nutzer es verlassen, aber die statischen Variablen werden neu erstellt, um den init-Wert.
Versuchen, sich den Weg die android - activity lifecycle funktioniert. Mit diesem Ansatz wird das Ergebnis in weniger genutzten Speicher und eine viel bessere user experience.
InformationsquelleAutor Janusz
Vielleicht bin ich etwas fehlt, aber warum nicht einfach
startActivityForResult
undonActivityResult
Mechanismus? Sie könnte sich von Ihnen subactivity aus Absicht es war Folge mit.Edit: BTW soweit ich das verstanden habe, wenn Sie
Object.wait()
ausActivity
- code, wenn Sie halten werden, die UI-tread einstellen kann Ergebnis inApplication not responding
Fehler.InformationsquelleAutor Nikolay Ivanov
Check-out die Notepad-Beispiel, es deckt genau diese situation. Und wie andere gesagt haben, ist Android Weg ist, um Ihre erste Aktivität starten Ihre zweite Tätigkeit (nicht sub-Aktivität!) und asynchron hören für eine Antwort (keine pause oder warten, keine Notwendigkeit für einen Beitritt, etc.).
InformationsquelleAutor Josh
Naja... man kann es so machen (btw, es gibt nicht gerade nach vorne Weg):
Haben eine singleton-Klasse, nennen wir es mal-Monitor:
versuchen Sie,............................................................. Singleton si = Singleton.getInstance(); synchronized(si) {"si".wait(); } in postDelayed(...);
Ich bin nicht vertraut mit postDelay(r,t); aber ich habe darüber gelesen und versucht, aber unsuccesfuly, "app reagiert nicht, force close" ich denke, warten und Benachrichtigung in android nicht richtig funktionieren.
Ich brauche sowas!
InformationsquelleAutor Gaurav Vaish
Ich bin nicht hier, um zu beurteilen, ob es ein gutes Muster oder nicht, aber wenn Sie wirklich brauchen, eine Aktivität zu warten, bis eine sub-activity, können Sie versuchen, diesen Ansatz:
Ich habe ein ähnliches Ding in meiner app und IMHO hatten einen guten Grund für diese (nicht die Mühe, einen Benutzer mit dem login-Bildschirm auf app starten oder fortsetzen, die app versucht zu re-verwenden Sie Anmeldeinformationen gespeichert in einem sicheren Ort, und nur falls dies fehlschlägt, zeigt diese login-Bildschirm. Also ja, grundsätzlich jede Tätigkeit in meiner app bekommen kann "angehalten" und wartet, bis der Benutzer die richtigen Anmeldeinformationen in der login-Aktivität, auf die der login-Bildschirm beendet und die app genau da weiter, wo es wurde angehalten (in der übergeordneten Aktivität).
In den code, es wäre so etwas wie dieses:
ParentActivity:
ChildActivity:
InformationsquelleAutor pepan