[android-developers] Re: onSharedPreferenceChanged() Not Called in Live Wallpaper (WallpaperService) Engine

2010-04-18 Thread shaun
Operator head spacing

I just looked at AndroidManifest.xml again and I noticed I
accidentally left the configuration for the service to run in a new
process each time instantiated (via android:process=:myprocessname.
I was experimenting with this at one point during another debugging
session.  If it starts with a colon, a new process is given each time
and that would explain why I was getting different SharedPreferences
instances...they were different PIDs, which I did not notice at first
either.

The SharedPreferences API docs state Note: currently this class does
not support use across multiple processes. This will be added later.

So, I just removed the android:process configuration from
AndroidManifest.xml and things are working as expected.

On Apr 16, 3:39 pm, shaun shashepp...@gmail.com wrote:
 Well, I tested one of the sample applications (http://code.google.com/
 p/androgames-sample/) and both the Engine's and Settings'
 onSharedPreferenceChanged() methods are called and with the same
 instance ofSharedPreferencesobject.  So, apparently something is
 different in myLiveWallpaper.

 I went through everything top to bottom and made some small (I'd say
 very minor) tweaks to my code/config to further match the example and
 still the same results - the Engine's onSharedPreferenceChanged()
 method is not called while the Settings' is.

 I also noticed thatSharedPreferencesinstance returned in the Engine
 constructor (via prefs =
 LiveWallpaperService.this.getSharedPreferences(PREFS_NAME,
 0)) is a different object instance than that passed in to
 onSharedPreferenceChanged() of the Settings class.  Nowhere do I
 create a new instance ofSharedPreferencesnor do I have any other
 code related to shared preferences outside of what is being discussed
 here.  So, Android is serving up 2 separate instances ofSharedPreferencesfor 
 some reason Why?

 I am boggled.  Please help me think.

 On Apr 16, 11:45 am, shaun shashepp...@gmail.com wrote:





  I am experiencing something strange with aLiveWallpaper.  I very
  closely followed several examples out there onLiveWallpapers in
  regards to shared preference settings (e.g. Android sample app Cube
 LiveWallpaper).

  The Engine implements
 SharedPreferences.OnSharedPreferenceChangeListener and the pertienent
  code in Engine looks like this:

  public static final String PREFS_NAME = some-name;

  Engine() {
      prefs = LiveWallpaperService.this.getSharedPreferences(PREFS_NAME,
  0);
      prefs.registerOnSharedPreferenceChangeListener(this);

  }

  public void onSharedPreferenceChanged(SharedPreferences
 sharedPreferences, String key) {
            Log.e(getClass().getSimpleName(), on shared preference
  changed);

  }

  NOTE: I never unregister the Engine instance as a shared prefs
  listener.  Although, I did move some things around to onCreate and
  onDestroy (added the unregister there) and had no impact as far as I
  could tell.

  The Settings class extends PreferenceActivity and implements
 SharedPreferences.OnSharedPreferenceChangeListener as well.  And since
  that class has little code here is the body:

      @Override
       protected void onCreate(Bundle icicle) {
           super.onCreate(icicle);

  getPreferenceManager().setSharedPreferencesName(Engine.PREFS_NAME);
           addPreferencesFromResource(R.xml.settings);

  getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceCha 
  ­ngeListener(this);
       }

      �...@override
       protected void onDestroy() {

  getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceC 
  ­hangeListener(this);
           super.onDestroy();
       }

       public void onSharedPreferenceChanged(SharedPreferences
 sharedPreferences, String key) {
            Log.e(getClass().getSimpleName(), on shared preference
  changed);
       }

  The only thing coming out in the log is from the Settings class for on
  shared pref change.  Anyone have any idea why?

  In the implementations I've found forLiveWallpapershared prefs
  settings, the Engine constructor either uses the shared preferences or
  calls to onSharedPreferenceChanged() directly.  It seems like those
  other examples may be experiencing the same thing I described above,
  and they worked around it!?!?

  I do admit I have not taken the example code from others and tried it
  out to see if the Engine onSharedPreferenceChanged() gets called.  I
  will do that tonight or this weekend.

  --
  You received this message because you are subscribed to the Google
  Groups Android Developers group.
  To post to this group, send email to android-developers@googlegroups.com
  To unsubscribe from this group, send email to
  android-developers+unsubscr...@googlegroups.com
  For more options, visit this group 
  athttp://groups.google.com/group/android-developers?hl=en

 --
 You received this message because you are subscribed to the Google
 Groups Android Developers group.
 To post to this group, send email to 

[android-developers] Re: onSharedPreferenceChanged() Not Called in Live Wallpaper (WallpaperService) Engine

2010-04-16 Thread shaun
Well, I tested one of the sample applications (http://code.google.com/
p/androgames-sample/) and both the Engine's and Settings'
onSharedPreferenceChanged() methods are called and with the same
instance of SharedPreferences object.  So, apparently something is
different in my Live Wallpaper.

I went through everything top to bottom and made some small (I'd say
very minor) tweaks to my code/config to further match the example and
still the same results - the Engine's onSharedPreferenceChanged()
method is not called while the Settings' is.

I also noticed that SharedPreferences instance returned in the Engine
constructor (via prefs =
LiveWallpaperService.this.getSharedPreferences(PREFS_NAME,
0)) is a different object instance than that passed in to
onSharedPreferenceChanged() of the Settings class.  Nowhere do I
create a new instance of SharedPreferences nor do I have any other
code related to shared preferences outside of what is being discussed
here.  So, Android is serving up 2 separate instances of
SharedPreferences for some reason Why?

I am boggled.  Please help me think.

On Apr 16, 11:45 am, shaun shashepp...@gmail.com wrote:
 I am experiencing something strange with a Live Wallpaper.  I very
 closely followed several examples out there on Live Wallpapers in
 regards to shared preference settings (e.g. Android sample app Cube
 Live Wallpaper).

 The Engine implements
 SharedPreferences.OnSharedPreferenceChangeListener and the pertienent
 code in Engine looks like this:

 public static final String PREFS_NAME = some-name;

 Engine() {
     prefs = LiveWallpaperService.this.getSharedPreferences(PREFS_NAME,
 0);
     prefs.registerOnSharedPreferenceChangeListener(this);

 }

 public void onSharedPreferenceChanged(SharedPreferences
 sharedPreferences, String key) {
           Log.e(getClass().getSimpleName(), on shared preference
 changed);

 }

 NOTE: I never unregister the Engine instance as a shared prefs
 listener.  Although, I did move some things around to onCreate and
 onDestroy (added the unregister there) and had no impact as far as I
 could tell.

 The Settings class extends PreferenceActivity and implements
 SharedPreferences.OnSharedPreferenceChangeListener as well.  And since
 that class has little code here is the body:

     @Override
      protected void onCreate(Bundle icicle) {
          super.onCreate(icicle);

 getPreferenceManager().setSharedPreferencesName(Engine.PREFS_NAME);
          addPreferencesFromResource(R.xml.settings);

 getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceCha­ngeListener(this);
      }

     �...@override
      protected void onDestroy() {

 getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceC­hangeListener(this);
          super.onDestroy();
      }

      public void onSharedPreferenceChanged(SharedPreferences
 sharedPreferences, String key) {
           Log.e(getClass().getSimpleName(), on shared preference
 changed);
      }

 The only thing coming out in the log is from the Settings class for on
 shared pref change.  Anyone have any idea why?

 In the implementations I've found for Live Wallpaper shared prefs
 settings, the Engine constructor either uses the shared preferences or
 calls to onSharedPreferenceChanged() directly.  It seems like those
 other examples may be experiencing the same thing I described above,
 and they worked around it!?!?

 I do admit I have not taken the example code from others and tried it
 out to see if the Engine onSharedPreferenceChanged() gets called.  I
 will do that tonight or this weekend.

 --
 You received this message because you are subscribed to the Google
 Groups Android Developers group.
 To post to this group, send email to android-developers@googlegroups.com
 To unsubscribe from this group, send email to
 android-developers+unsubscr...@googlegroups.com
 For more options, visit this group 
 athttp://groups.google.com/group/android-developers?hl=en

-- 
You received this message because you are subscribed to the Google
Groups Android Developers group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en