2010-12-29 14 views
0

Ich habe ein Widget, das in einer Anwendung verpackt ist, und ich habe einige Zweifel über den Kontext/Lebenszyklus des Widgets/Anwendung:Informationen über Widget Kontext/Lifecycle

  • Die Anwendung und Widget teilen die gleichen Prozess und fortlaufend Singletons?
  • Wenn ich Dienste habe, müssen sie entfernte sein?
  • In welchem ​​Lebenszyklus wird das Widget aktualisiert? Ist nur für das Widget?

In der Regel keine Informationen über den Widget-Lifecycle/Kontext sehr apreciated

+0

ist das nicht http://developer.android.com/guide/topics/appwidgets/index.html genug? –

+0

Nein, ich habe es gelesen und kann meine Fragen mit dieser Information nicht beantworten – lujop

Antwort

1

Die Anwendung und Widget teilen sich den gleichen Prozess

würde, wenn Sie auf den Code anschauen, werden Sie feststellen, eine Klasse, die AppWidgetProvider aller Wahrscheinlichkeit nach erweitert. Mit diesem Code wird die Benutzeroberfläche des Startbildschirms für den Teil aktualisiert, den Ihr App-Widget belegt.

Wenn Sie sich Ihr Manifest ansehen, werden Sie sehen, dass Sie Ihren AppWidgetProvider als <receiver> hinzugefügt haben. Dies zeigt an, dass AppWidgetProvider ein BroadcastReceiver ist. Manifest-registriert BroadcastReceivers für eine sehr kurze Zeit leben - lang genug, um onReceive() zu verarbeiten, und das ist es.

Daher ist es möglich, dass "die Anwendung und das Widget den gleichen Prozess teilen", sofern Sie bereits einen Prozess haben (z. B. der Benutzer befindet sich gerade in einer Ihrer Aktivitäten) und onUpdate() Ihrer wird ausgelöst, dann wird der AppWidgetProvider in demselben Prozess sein. Wenn Ihre Anwendung jedoch nicht ausgeführt wird, wird onUpdate() für Ihre AppWidgetProvider in einem Prozess ausgeführt, der möglicherweise zuvor Ihren Code gehostet hat oder nicht.

und folglich Singletons?

Sie sollten sich nicht darauf verlassen.

Wenn ich Dienste habe, müssen sie entfernt sein?

Absolut nicht, für jede Definition von "Remote".

In welchem ​​Lebenszyklus wird das Widget aktualisiert? Ist nur für das Widget?

Siehe oben.

+0

Ich verstehe, dass ich keine Ferndienste verwenden muss, da es garantiert ist, dass, wenn die Anwendung und der WidgetProvider in einem Moment ausgeführt werden Gleichzeitig werden sie den Prozess teilen? – lujop

+0

@lujop: Ja. Davon abgesehen können Sie nicht im Voraus wissen, ob Ihr AppWidgetProvider im selben Prozess mit etwas anderem läuft. Das ist einer der wenigen Gründe, warum 'AppWidgetProvider' 'startService()' verwenden sollte, um mit Diensten zu kommunizieren. – CommonsWare

Verwandte Themen