2010-12-29 3 views
5

Ich versuche eine sehr einfache App zu schreiben, die nur eine sehr einfache Aktion ohne GUI ausführt, und dann eine kurze Nachricht anzeigt (mit Toast, auf oben auf dem Bildschirm, z. B. Startbildschirm), und fertig. Das ist alles.Wie man die GUI einer Aktivität komplett loswird (einen schwarzen Bildschirm vermeiden)

Das funktioniert fast, aber ich bekomme immer noch einen kurzen schwarzen Bildschirm, nachdem die App startet, dann zurück zum Startbildschirm und die Dinge funktionieren so, wie ich danach vorhabe. Ich dachte, dass es nicht ausreichen würde, setContentView für meine Aktivität zu verwenden (und damit eine View zu vermeiden), um den schwarzen Bildschirm zu vermeiden, aber es taucht immer noch auf. Bitte beachten Sie, dass (wie in einer verwandten Frage vorgeschlagen), ein Service ist nicht die Antwort auf mein Problem. Ich möchte nur eine GUI-lose (mit Ausnahme von einem Toast) App, die läuft und endet sofort. Thanks :)

+1

Es wäre wahrscheinlich hilfreich, wenn Sie erklären würden, warum ein Service nicht die Antwort auf Ihr Problem ist. Das klingt sehr serviceorientiert. – Matt

+1

Erstens, weil ich nicht möchte, dass mein Prozess im Hintergrund läuft, wie es die Dienste tun sollen. Ich möchte schnell und sauber ein- und aussteigen. Und zweitens gibt die Android-Dokumentation direkt an, dass Aktivitäten keine Benutzeroberfläche haben müssen, aber ich habe den Weg dazu nicht gefunden. (Antwort 1 hat mein Problem bereits gelöst) Danke trotzdem. – shutou

Antwort

17

In <activity> in Ihrem Manifest Verwendung

android:theme="@android:style/Theme.NoDisplay" 

Hinweis: dieser Sie übernimmt Rufen Sie finish() bevor Sie von onResume() zurückkehren. Wenn Sie danach mehr Arbeit machen (zum Beispiel, wenn Sie irgendwelche Netzwerke oder andere Dinge tun, die nicht schnell synchron erledigt werden können), werden Sie wahrscheinlich einen Dienst starten wollen, der sich um die Arbeit kümmert die Plattform, auf der Ihr Prozess nach Abschluss der Aktivität weiter ausgeführt werden soll.

+0

Großartig! Das ist genau das, was ich brauchte. Gerade weil ich nicht möchte, dass mein Prozess im Hintergrund weiterläuft. Danke Kumpel! – shutou

+0

@shutou: Das ist wahrscheinlich (obwohl ich keine Ahnung habe) mehr Aufwand als das Starten eines Dienstes. Sie müssen den Dienst nicht im Hintergrund laufen lassen. Sehen Sie meine Antwort auf meine Antwort. – Falmarri

+0

Ich verwende eine Eintragsaktivität als meine Launcher-Aktivität, da die tatsächliche Aktivität durch eine bestimmte Logik (z. B. Intro, Anmeldung oder Inhalt) bestimmt werden muss. Vorher würde sich auch die Einstiegsaktivität zeigen, was nervig war aber jetzt ist es verschwunden! Danke – Meanman

-1

ein Dienst nicht die Antwort auf meine Problem ist

Ja, es ist

+0

In Ordnung, es kann eine alternative Möglichkeit sein, das zu tun, was ich möchte, aber wie man sieht, ist es möglich, die Anzeige der Benutzeroberfläche einer App zu beenden. Und da ich nicht möchte, dass Hintergrundprozesse ausgeführt werden, nachdem meine einfache App fertig ist, dachte ich mir, dass ein Dienst mehr ist als das, was ich brauche. Ich gebe zu, aber ich weiß immer noch nicht genug, um sicher zu sein, ob ein Dienst effizienter sein kann als die Lösung in Antwort 1, die meiner App nur eine minimale Aktivität ermöglicht, die keine zusätzlichen Prozesse umfasst oder Threads. Ich kann mehr über Dienstleistungen erfahren, um die Vor- und Nachteile näher zu betrachten. Danke – shutou

+0

Die Dienste erzeugen keine zusätzlichen Prozesse oder Threads. Ein Dienst ist im Wesentlichen eine Aktivität ohne GUI. Ich habe den Quellcode nicht gründlich untersucht, aber ich werde es fast genau sein. Sie müssen den Dienst nicht laufen lassen. In der Tat, tu das nicht. Starten Sie einfach den Dienst, machen Sie die Arbeit, und rufen Sie 'stopSelf()' – Falmarri

0

Klingt wie ein Job für einen IntentService. Sie senden es eine Absicht, und wenn es nicht läuft, startet es, dann behandelt es alle empfangenen Absichten, dann stoppt es. Kurz und einfach.

Verwandte Themen