4 Stimmen

Wie kann ich feststellen, wann meine Anwendung läuft?

Ich habe eine Anwendung, die einen Dienst zum Abrufen von Daten im Hintergrund verwendet, sowohl während die Anwendung ausgeführt wird, als auch wenn sie nicht läuft. Wenn sie nicht läuft, möchte ich eine Benachrichtigung anzeigen, wenn es neue Daten gibt, aber nicht, wenn die Anwendung läuft.

Wie kann ich in meinem Dienst feststellen, ob die Anwendung läuft oder nicht?

1voto

friedger Punkte 605

Ich denke, Sie wollen überprüfen, ob eine bestimmte Aktivität angezeigt wird. Wenn das stimmt, würde ich die Methode Activity.onCreate() verwenden, um ein Flag in der Anwendungsinstanz zu setzen, d.h. die Klasse Application mit einem Feld "uiRunning" zu erweitern und dieses Feld in Ihrem Dienst zu überprüfen. onDestroy() sollte verwendet werden, um das Attribut zu entmarkieren. Vergessen Sie nicht, Ihre Anwendungsklasse auch in der Manifest.xml zu verwenden

0voto

Mark Punkte 568

Ich würde der Verwendung von onCreate()/onDestroy() für eine einzelne Activity-Anwendung zustimmen, obwohl eine Anwendung mit mehreren Aktivitäten besser geeignet wäre, Application.onCreate()/onTerminate() zu verwenden, um das Auslösen des uiRunning-Status beim Umschalten von Aktivitäten zu vermeiden.

0voto

Simon Hughes Punkte 3494

Das ist ganz einfach. Sie verwenden eine benannte Mutex.

Geben Sie dies in die Anwendung ein, die Sie überprüfen möchten:

bool createdNew;
Mutex mutex = new Mutex(true, @"Global\YourAppNameHere", out createdNew);
if (createdNew)
{
    var app = new YourProcess();
    app.run();
    mutex.Close();
}

Fügen Sie dies in die Anwendung ein, die überprüft, ob die andere Anwendung läuft:

bool createdNew;
Mutex mutex = new Mutex(true, @"Global\YourAppNameHere", out createdNew);
if (createdNew)
{
    Console.WriteLine("App not running");
    mutex.Close();
} else {
    Console.WriteLine("App is running");
}

0voto

Bryan Bedard Punkte 2559

Eine andere Möglichkeit besteht darin, ein Listener-Pattern zu implementieren und Ihren Dienst eine Liste von Listenern mit Methoden für addListener() und removeListener() in Ihrer Dienstschnittstelle verwalten zu lassen. Ihre Aktivität kann sich selbst als Listener hinzufügen, nachdem sie sich mit dem Dienst verbunden hat, und sich selbst mit onStop() wieder entfernen (d. h. wenn die Anwendung für den Benutzer nicht mehr sichtbar ist oder vollständig heruntergefahren wurde).

Überprüfen Sie in Ihrem Dienst die Anzahl der Zuhörer. Wenn es keine Zuhörer gibt, wissen Sie, dass Sie Ihre Benachrichtigung erstellen sollten.

0voto

Kshitij Aggarwal Punkte 5219

Eine andere Möglichkeit besteht darin, den Datenempfänger an einen "Dienst" zu koppeln, der immer im Hintergrund läuft. Sie können Ihre Anwendung an den Dienst binden und die vom Dienst abgerufenen Daten anzeigen lassen.

Das Problem mit der Anwendung im Hintergrund ist, dass Android die Anwendung beendet, sobald sie zu alt wird. Es ist immer besser, eine solche Hintergrundanwendung als Dienst und nicht als Aktivität laufen zu lassen.

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