Изменение языка, когда приложение находится в фоновом режиме - PullRequest
2 голосов
/ 04 июня 2011

Кто-нибудь пробовал это?

У меня есть приложение, которое я настроил для запуска на 2 разных языках в зависимости от локали устройства.

Шаги для воспроизведения.

(учитывая, что я использую французский и английский)

  1. Установить английскую локаль.
  2. Загрузите приложение.
  3. Отправить приложение в фоновый режим.
  4. Изменить язык устройства на французский.
  5. Вернитесь в свое приложение и сделайте его активным.
  6. (все выглядит нормально ... все загружено по-французски (как и должно быть))
  7. Переход к другому экрану.
  8. Получите NullPointerException !!!

да?!

Есть мысли по этому поводу?

Позднее редактирование (запрос)

Вот трассировка стека ADB:

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

Любой

Ответы [ 4 ]

1 голос
/ 09 июня 2011

Возможно, вы вышли из жизненного цикла активности и некоторые объекты не создаются во время переключения, поэтому вам следует проверить следующее:

  1. Работает ли это без шага 4?
  2. Если некоторые значения кэшируются / не переводятся должным образом (например, вы устанавливаете некоторые поля вместо обновления каждый раз)

    mField = getString(R.string.title);
    
1 голос
/ 10 июня 2011

Узнал что не так.

У меня был метод System.Exit (0) для моего метода OnDestroy на экране, в котором я находился при переходе в фоновый режим.

Похоже, что если вы отправите приложение в фоновый режим, а затем вернетесь к нему, OnDestroy вызываться не будет.

НО

Если вы тем временем меняете локаль, а затем возвращаетесь к ней, OnDestray будет вызываться !!!!

Это достаточно странно, но это еще более, в моем случае, onDestroy вызывается (System.exit (0) неявно, но экран все еще там ... приложение не выходило (даже больше .. оно загрузилось) Французский правильно !!) это сбивало с толку.

Во всяком случае .. странные вещи решены. Спасибо за ваш вклад.

0 голосов
/ 10 мая 2019

Если вы вносите изменения в локаль во время выполнения, не забудьте установить локальный в onResume (). У меня есть похожая проблема с прядильщиком, не поддерживающим язык, на котором он был установлен, когда он был изменен пользователем вручную. Когда приложение перешло в фоновый режим, счетчик показывал значения на английском, а не на испанском. Я просто установил свой язык в резюме о деятельности.

0 голосов
/ 07 июня 2011

Не видя вашего кода, невозможно точно сказать, в чем проблема. Комментарии выше дают вам отличное место, чтобы начать пытаться отладить проблему. Одна вещь, за которой нужно следить, - это когда вы используете строку в качестве ключа. Если ключ будет переведен во время работы приложения, он не сможет найти значение.

...