应用程序在一段时间不活动后会奇怪地响应

时间:2012-02-02 06:43:59

标签: android nullpointerexception

我有一个包含片段的活动(比方说,MyActivity),我使用fragmentTransaction.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 个答案:

答案 0 :(得分:3)

当这样的事情发生时,主要是因为整个应用程序由于需要内存而被系统关闭,并且迫使系统再次调用onCreate

Android最好尝试恢复以前的状态,并尝试打开活动堆栈中的最后一个活动。

使用Bundle时,从Intent传递的值可能是null

尝试确保您没有从其他Activity传递的任何值,并且未验证其完整性(确保您具有条件if(value!=null))... < / p>

修改

您还可以覆盖onLowMemory(),将某些内容保存到共享首选项,并在活动加载时加载它们。

答案 1 :(得分:0)

它是一个空指针异常,检查你通过函数replace(XX,YY)传递的值。使用调试器的.put断点,你将获得解决方案。并确保您已在androidmanifest.xml中注册了您的活动,因为它的声音无法启动活动。如果您的应用程序没有及时响应此检查,那么一件重要的事情Response time 它会对你有所帮助。

答案 2 :(得分:0)

你可以使用:

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

了解有关共享偏好的更多信息: 只需要在stackflow中输入150+以上的问题: Shared Preference