Android 应用程序在处于不活动状态后出现异常响应

Android 应用程序在处于不活动状态后出现异常响应,android,nullpointerexception,Android,Nullpointerexception,我有一个包含片段的活动(比如MyActivity),我使用fragmentTransaction.replace(XX,YY)来更改片段。在一段时间的不活动之后,当应用程序恢复时,它的行为异常,并给我以下异常(我不知道活动是否在此期间死亡或发生了什么) “java.lang.RuntimeException:无法启动活动组件信息{com.platinumapps.facedroid/com.platinumapps.facedroid.facedroid}:java.lang.NullPoint

我有一个包含片段的活动(比如MyActivity),我使用fragmentTransaction.replace(XX,YY)来更改片段。在一段时间的不活动之后,当应用程序恢复时,它的行为异常,并给我以下异常(我不知道活动是否在此期间死亡或发生了什么)

“java.lang.RuntimeException:无法启动活动组件信息{com.platinumapps.facedroid/com.platinumapps.facedroid.facedroid}:java.lang.NullPointerException
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1815)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1831)
在android.app.ActivityThread.access上$500(ActivityThread.java:122)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1024)上
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:132)
位于android.app.ActivityThread.main(ActivityThread.java:4123)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:491)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
在dalvik.system.NativeStart.main(本机方法)
原因:java.lang.NullPointerException
位于com.platinumapps.facedroid.MyFragment.(MyFragment.java:90)
位于java.lang.Class.newInstanceImpl(本机方法)
位于java.lang.Class.newInstance(Class.java:1301)
在android.app.Fragment.instantiate处(Fragment.java:560)
在android.app.FragmentState.instantiate(Fragment.java:96)中
在android.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:1589)
位于android.app.Activity.onCreate(Activity.java:854)
位于com.platinumapps.facedroid.facedroid.onCreate(facedroid.java:78)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1779)上
…还有11个
java.lang.NullPointerException
位于com.platinumapps.facedroid.MyFragment.(MyFragment.java:90)
位于java.lang.Class.newInstanceImpl(本机方法)
位于java.lang.Class.newInstance(Class.java:1301)
在android.app.Fragment.instantiate处(Fragment.java:560)
在android.app.FragmentState.instantiate(Fragment.java:96)中
在android.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:1589)
位于android.app.Activity.onCreate(Activity.java:854)
位于com.platinumapps.facedroid.facedroid.onCreate(facedroid.java:78)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1779)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1831)
在android.app.ActivityThread.access上$500(ActivityThread.java:122)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1024)上
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:132)
位于android.app.ActivityThread.main(ActivityThread.java:4123)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:491)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
在dalvik.system.NativeStart.main(本机方法)

关于它的任何建议都将非常有用。谢谢这是一个空指针异常,请检查通过函数replace(XX,YY)传递的值。使用调试器设置断点,您将获得解决方案。请确保您已在androidmanifest.xml中注册了活动,因为它听起来无法启动活动。如果您的应用程序没有及时响应,请检查它
这将对您有所帮助。

当发生这种情况时,主要是因为系统出于内存需求关闭了整个应用程序,并迫使系统再次调用onCreate

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

从另一个活动传递的值(当使用
意图时,通过
捆绑
)现在可能为
null

尝试确保您没有从不同的
活动传递的任何值,并且未验证其完整性(如果(value!=null)
,请确保您具有条件

编辑

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

您可以使用:

import android.preference.PreferenceManager;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// then you use
prefs.getBoolean("keystring", true);
有关共享首选项的更多信息: 只需在stackflow中点击150多个问题:

在MyFragment.java:90,我正在尝试使用主(其父)活动的上下文获取SharedReference。感谢您的回复。错误发生在应用程序处于后台且处于非活动状态数小时后。启动应用程序时一切正常。我猜该活动是由操作系统导致的,或者类似的情况……:(不客气。那么您在DDMS中的活动所花费的时间。您会得到它的。请减少您的应用程序运行时间或响应时间。您的代码没有问题。只需降低时间复杂性,一切都会很好……)谢谢你的回复。我能确保操作系统不会杀死activity吗?@fdmirza看看系统是否需要内存,它肯定会杀死不需要的内存,或者你的活动来释放内存。还有释放内存或者杀死进程和活动的偏好。看看这个。你会明白我所看到的一切。应用程序可以重新启动吗一旦操作系统杀死了一个活动?所以它不应该从最后一个状态启动,而是重新启动整个操作系统
import android.preference.PreferenceManager;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// then you use
prefs.getBoolean("keystring", true);