Приложение странно реагирует после отсутствия активности - PullRequest
1 голос
/ 02 февраля 2012

У меня есть действие (скажем, MyActivity), которое содержит фрагменты, и я использую фрагментTransaction.replace (XX, YY) для изменения фрагмента. После периода бездействия, когда приложение возобновляется, оно ведет себя ненормально и выдает следующее исключение (я не знаю, умерла ли активность за это время или что произошло).

"java.lang.RuntimeException: Unable to start activity ComponentInfo{com.platinumapps.facedroid/com.platinumapps.facedroid.facedroid}: java.lang.NullPointerException
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1815)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1831)
    at android.app.ActivityThread.access$500(ActivityThread.java:122)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1024)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:132)
    at android.app.ActivityThread.main(ActivityThread.java:4123)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:491)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
    at com.platinumapps.facedroid.MyFragment.<init>(MyFragment.java:90)
    at java.lang.Class.newInstanceImpl(Native Method)
    at java.lang.Class.newInstance(Class.java:1301)
    at android.app.Fragment.instantiate(Fragment.java:560)
    at android.app.FragmentState.instantiate(Fragment.java:96)
    at android.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:1589)
    at android.app.Activity.onCreate(Activity.java:854)
    at com.platinumapps.facedroid.facedroid.onCreate(facedroid.java:78)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1779)
    ... 11 more
java.lang.NullPointerException
    at com.platinumapps.facedroid.MyFragment.<init>(MyFragment.java:90)
    at java.lang.Class.newInstanceImpl(Native Method)
    at java.lang.Class.newInstance(Class.java:1301)
    at android.app.Fragment.instantiate(Fragment.java:560)
    at android.app.FragmentState.instantiate(Fragment.java:96)
    at android.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:1589)
    at android.app.Activity.onCreate(Activity.java:854)
    at com.platinumapps.facedroid.facedroid.onCreate(facedroid.java:78)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1779)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1831)
    at android.app.ActivityThread.access$500(ActivityThread.java:122)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1024)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:132)
    at android.app.ActivityThread.main(ActivityThread.java:4123)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:491)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
    at dalvik.system.NativeStart.main(Native Method)

Любые предложения по нему будут очень ценными. Спасибо

Ответы [ 3 ]

3 голосов
/ 02 февраля 2012

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

Android старается восстановить предыдущее состояние и пытается открыть последнее действие в стеке действий.

Возможно, что значение, передаваемое из другого действия (Bundle при использовании Intent), теперь равно null.

Постарайтесь убедиться, что у вас нет значения, переданного из другого Activity и не проверено его целостность (убедитесь, что у вас есть условие if(value!=null)) ...

EDIT

Вы также можете переопределить onLowMemory(), сохранить некоторые вещи в общих настройках и загрузить их при загрузке активности.

0 голосов
/ 02 февраля 2012

вы можете использовать:

import android.preference.PreferenceManager;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// then you use
prefs.getBoolean("keystring", true);

, чтобы узнать больше об общих предпочтениях: просто ответьте на вопрос больше 150+ в стеке: Общее предпочтение

0 голосов
/ 02 февраля 2012

это исключение нулевого указателя, проверьте значения, которые вы проходите через функцию replace (XX, YY). Выходные точки останова с помощью отладчика, вы получите решение вызывающе.и убедитесь, что вы зарегистрировали свою активность в androidmanifest.xml, так как ее звуки не могут запустить активность. И одна важная вещь, если ваше приложение не отвечает вовремя для этой проверки, проверьте это Время ответа , это будет полезно для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...