5 Stimmen

StartActivitySync bleibt hängen, wenn eine Aktivität wieder in den Vordergrund gebracht wird

Ich schreibe einen Test, der meine Hauptaktivität startet und sie dann sofort im Hintergrund ausführt, indem ich den Startbildschirm mit dem folgenden Intent aufrufe:

    Intent intent= new Intent(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_HOME);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

Danach versuche ich, die Aktivität meiner App wieder in den Vordergrund zu bringen, indem ich einen ähnlichen Intent wie oben verwende (ohne die CATEGORY_HOME-Flagge und stattdessen füge ich den Aktivitätsnamen und das Paket hinzu). Da ich sicherstellen muss, dass die Aktivität meiner App erfolgreich gestartet wurde, verwende ich die "startActivitySync"-Methode von Instrumentation.

Wenn ich den Test ausführe, sehe ich, dass die App erfolgreich im Hintergrund und dann wieder im Vordergrund ausgeführt wird, aber der Test läuft nie zu Ende. Er hängt sich immer in der "startActivitySync"-Methode auf. Irgendwelche Ideen, warum das passiert?

1voto

user77115 Punkte 5305

In meiner Erfahrung:

public testOne(){
 MyActivity first = startActivitySync(...);
 first.finish();
 MyActivity second = startActivitySync(...);
}

public testTwo(){
 MyActivity first = startActivitySync(...);
 ...
}

, testOne() wird erfolgreich sein,
aber testTwo() wird bei "startActivitySync" hängen bleiben.

Vorgeschlagene Lösung:
Bereinigen Sie Ihre gestarteten Aktivitäten am Ende jedes Tests, z.B.:

public testOne(){
 MyActivity first = startActivitySync(...);
 first.finish();
 MyActivity second = startActivitySync(...);
 second.finish();
}

public testTwo(){
 MyActivity first = startActivitySync(...);
 first.finish();
}

0voto

Jeremy Haberman Punkte 1340

Statt diesen Konstruktor zu verwenden:

Intent intent = new Intent(String action);

versuche diesen:

Intent intent = new Intent(Context packageContext, Class cls):

Ich bin auf ein ähnliches Problem gestoßen, bei dem startActivitySync(Intent) hängen blieb, und das hat es für mich gelöst. Es hat beim ersten Test funktioniert, aber bei nachfolgenden Tests in derselben Klasse ist es fehlgeschlagen. Warum? Das weiß ich nicht.

0voto

eleven Punkte 6702

Es gibt viele solcher Fragen, aber fast alle Antwortenden schlagen vor, eine Aktivität zu beenden, was meiner Meinung nach in den meisten Fällen nicht funktioniert.

Wenn deine Aktivität nicht endet, bedeutet das einfach, dass eine UI-Operation weiterläuft. Und tatsächlich könnte es bedeuten, dass etwas mit deiner Aktivität nicht stimmt. Zum Beispiel hatte ich kürzlich ein ähnliches Problem und fand heraus, dass eine Animation nicht ordnungsgemäß gestoppt wurde:

Animation anim = AnimationUtils.loadAnimation(getContext(), R.anim.rotate_infinite_clockwise);
view.startAnimation(anim);

Die einfachste Methode, das Problem zu lösen, besteht also darin, die Ansichten nacheinander zu deaktivieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X