Frage

Ich habe eine Klasse, die Daten in Reaktion auf Tastendruck in der Haupttätigkeit abruft. Leider halten, ich Probleme laufen, weil diese Klasse nicht eine Aktivität oder eine Dienstleistung ist. Zum Beispiel, ohne Kontext kann ich nicht eine Ressource-ID in einen String übersetzen:

getString(R.string.example_string); // Doesn't work

Sollte ich diese Klasse in einen Dienst und haben die Hauptaktivität Stopp der Klasse, wenn es geschlossen ist? Sollte ich den Kontext von der Aktivität in dieser Klasse wie folgt passieren?

MyClass c = new MyClass(this);

Oder gibt es eine bessere Möglichkeit, dieses Problem zu umgehen?

Dieses Problem kommt auch auf, wenn ich versuche, einen Toast aus dieser Klasse zu senden.

Update: Erich und Janusz wies mich in Richtung der AsyncTask Klasse, die perfekt funktioniert, mit der Ausnahme, dass es einen neuen Thread erstellt und tötet nie diesen Thread. Dies bedeutet, dass immer, wenn der Benutzer eine Taste drückt, wird ein anderer Thread hinzugefügt und die alten nur dort sitzen.

War es hilfreich?

Lösung

Wenn Sie eine Hintergrundaktion, deren Lebenszyklus haben, ist von Ihrer Aktivität entkoppelt, würde ich eine Service verwenden. In diesem Fall wird die Service seine eigene Context haben, so dass Sie nicht brauchen, um zu passieren. Wenn jedoch müssen Sie einen Hintergrund Aktion in Reaktion auf eine UI-Ereignis auslöst (und Post optional die Ergebnisse in die UI zurück Gewinde), ich würde Ihnen empfehlen, ein AsyncTask verwenden.

Andere Tipps

ich mit Erich zustimmen, wenn Sie nur ein etwas klein haben wie eine Änderung an einem Web-Backend oder Laden etwas aus dem Telefonspeicher Entsendung es Verwendung auf dem Bildschirm zu zeigen, ein Async Aufgabe . Wenn die Aufgabe sehr verlassen wird „schnell“ (einige Sekunden) können Sie eine anonyme Klasse in Ihrer Tätigkeit machen. Dies ermöglicht es Sie innerhalb der Aufgabe, einen impliziten Bezug auf die äußeree Aktivität zu verwenden, und Sie können Ihren Kontext von dort zu bekommen.

Wenn die Aufgabe für eine längere Zeit läuft, können Sie den Kontext überliefern. Wenn Sie nach unten Kontext try sind vorbei nicht passieren diese aus der Tätigkeit Verwendung this.getApplicationContext (), wird dies die Anzahl der Verweise auf Ihre Aktivität minimieren und die Garbage Collector ermöglichen richtig aufzuräumen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top