diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java index ccb8f1cc05174..45719e49fdde1 100644 --- a/core/java/android/service/wallpaper/WallpaperService.java +++ b/core/java/android/service/wallpaper/WallpaperService.java @@ -44,6 +44,8 @@ import android.view.ViewRoot; import android.view.WindowManager; import android.view.WindowManagerImpl; +import java.util.ArrayList; + /** * A wallpaper service is responsible for showing a live wallpaper behind * applications that would like to sit on top of it. This service object @@ -83,6 +85,8 @@ public abstract class WallpaperService extends Service { private static final int MSG_TOUCH_EVENT = 10040; private Looper mCallbackLooper; + private final ArrayList mActiveEngines + = new ArrayList(); static final class WallpaperCommand { String action; @@ -596,8 +600,10 @@ public abstract class WallpaperService extends Service { } void doVisibilityChanged(boolean visible) { - mVisible = visible; - reportVisibility(); + if (!mDestroyed) { + mVisible = visible; + reportVisibility(); + } } void reportVisibility() { @@ -666,6 +672,10 @@ public abstract class WallpaperService extends Service { } void detach() { + if (mDestroyed) { + return; + } + mDestroyed = true; if (mVisible) { @@ -773,10 +783,12 @@ public abstract class WallpaperService extends Service { } Engine engine = onCreateEngine(); mEngine = engine; + mActiveEngines.add(engine); engine.attach(this); return; } case DO_DETACH: { + mActiveEngines.remove(mEngine); mEngine.detach(); return; } @@ -844,6 +856,20 @@ public abstract class WallpaperService extends Service { } } + @Override + public void onCreate() { + super.onCreate(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + for (int i=0; i