Search code examples
androidbackgroundlocale

Changing language while application is in background


Has anyone tried this?

I have an app that I've configured to run in 2 different languages according to the locale of the device.

Steps to reproduce.

(considering I use French and English)

  1. Set English locale.
  2. Load the app.
  3. Send app to background.
  4. Change device locale to French.
  5. Return to your app and make it active.
  6. (All looks ok.. everything loaded in French now (as it should) )
  7. Go to another screen.
  8. Receive NullPointerException !!!

HUH?!

Any thoughts on this?

Later edit (request)

Here's the ADB stacktrace:

06-04 00:35:27.093: WARN/dalvikvm(18434): threadid=3: thread exiting with uncaught exception (group=0x4001dc20)
06-04 00:35:27.093: ERROR/AndroidRuntime(18434): Uncaught handler: thread main exiting due to uncaught exception
06-04 00:35:27.123: ERROR/AndroidRuntime(18434): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.MyPackageName.__XXXXX__/com.MyPackageName.__XXXXX__.activity.MenuTabActivity}: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.MyPackageName.__XXXXX__/com.MyPackageName.__XXXXX__.activitygroup.MyProfileActivityGroup}: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.MyPackageName.__XXXXX__/com.MyPackageName.__XXXXX__.activity.myprofile.DriverProfileActivity}: java.lang.NullPointerException
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at android.app.ActivityThread.access$2200(ActivityThread.java:119)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at android.os.Looper.loop(Looper.java:123)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at android.app.ActivityThread.main(ActivityThread.java:4363)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at java.lang.reflect.Method.invokeNative(Native Method)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at java.lang.reflect.Method.invoke(Method.java:521)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:862)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at dalvik.system.NativeStart.main(Native Method)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434): Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.MyPackageName.__XXXXX__/com.MyPackageName.__XXXXX__.activitygroup.MyProfileActivityGroup}: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.MyPackageName.__XXXXX__/com.MyPackageName.__XXXXX__.activity.myprofile.DriverProfileActivity}: java.lang.NullPointerException
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at android.app.ActivityThread.startActivityNow(ActivityThread.java:2335)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:648)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at android.widget.TabHost.setCurrentTab(TabHost.java:320)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at android.widget.TabHost.addTab(TabHost.java:213)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at com.MyPackageName.__XXXXX__.activity.MenuTabActivity.onCreate(MenuTabActivity.java:80)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     ... 11 more
06-04 00:35:27.123: ERROR/AndroidRuntime(18434): Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.MyPackageName.__XXXXX__/com.MyPackageName.__XXXXX__.activity.myprofile.DriverProfileActivity}: java.lang.NullPointerException
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at android.app.ActivityThread.startActivityNow(ActivityThread.java:2335)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at com.MyPackageName.__XXXXX__.activitygroup.MyProfileActivityGroup.startChildActivity(MyProfileActivityGroup.java:69)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at com.MyPackageName.__XXXXX__.activitygroup.MyProfileActivityGroup.onCreate(MyProfileActivityGroup.java:63)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     ... 20 more
06-04 00:35:27.123: ERROR/AndroidRuntime(18434): Caused by: java.lang.NullPointerException
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at com.MyPackageName.__XXXXX__.activity.myprofile.DriverProfileActivity.onCreate(DriverProfileActivity.java:545)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
06-04 00:35:27.123: ERROR/AndroidRuntime(18434):     ... 27 more

Anyone?


Solution

  • Found out what was wrong.

    I had a System.Exit(0) on my OnDestroy method within the screen that I was in when going into background.

    It seems that if you send the app to background and then come back to it, OnDestroy WON'T be called.

    BUT

    If you change locale in the meanwhile and then come back to it, OnDestray will be called!!!!

    This is weird enough as it is But even more, in my case, onDestroy got called (System.exit(0) implicitly but the screen was still there.. the app didn't exit (even more.. it loaded French correctly !!) this was confusing.

    Anyway.. weird stuff solved. Thanks for your input.