清理RAM后,应用程序在恢复android应用程序时崩溃(NullPointerException)

清理RAM后,应用程序在恢复android应用程序时崩溃(NullPointerException),android,eclipse,memory,crash,Android,Eclipse,Memory,Crash,我的应用程序有问题。我在stackoverflow上搜索了一个解决方案,但没有找到 我还是开发android应用程序的新手。上周我自己创建了第一个应用程序 问题是:当我启动应用程序时,一切正常。另外,当我启动应用程序时,请转到“功能表”并立即恢复,但当我切换到“功能表”,清理内存,然后重新启动应用程序时,应用程序似乎仍在运行,因为它现在崩溃了。当我启动应用程序,切换到其他应用程序,然后返回到我的应用程序时,我也会有类似的效果。在这种情况下,应用程序也会崩溃。 那么,尽管我清理了内存,为什么应用程

我的应用程序有问题。我在stackoverflow上搜索了一个解决方案,但没有找到

我还是开发android应用程序的新手。上周我自己创建了第一个应用程序

问题是:当我启动应用程序时,一切正常。另外,当我启动应用程序时,请转到“功能表”并立即恢复,但当我切换到“功能表”,清理内存,然后重新启动应用程序时,应用程序似乎仍在运行,因为它现在崩溃了。当我启动应用程序,切换到其他应用程序,然后返回到我的应用程序时,我也会有类似的效果。在这种情况下,应用程序也会崩溃。 那么,尽管我清理了内存,为什么应用程序仍在运行?我应该用一些我不知道的基本代码重写onFinish或onPause方法吗? 当我有一段时间不使用它时,为什么应用程序会崩溃

日志:

12-18 23:19:06.850: E/AndroidRuntime(25262): FATAL EXCEPTION: main
12-18 23:19:06.850: E/AndroidRuntime(25262): java.lang.NullPointerException
12-18 23:19:06.850: E/AndroidRuntime(25262):    at de.dzapps.isoapp.IsoToleranzen.update(IsoToleranzen.java:1293)
12-18 23:19:06.850: E/AndroidRuntime(25262):    at de.dzapps.isoapp.IsoToleranzen$4.onItemClick(IsoToleranzen.java:441)
12-18 23:19:06.850: E/AndroidRuntime(25262):    at android.widget.AdapterView.performItemClick(AdapterView.java:298)
12-18 23:19:06.850: E/AndroidRuntime(25262):    at android.widget.AbsListView.performItemClick(AbsListView.java:1283)
12-18 23:19:06.850: E/AndroidRuntime(25262):    at de.dzapps.isoapp.IsoToleranzen$1.onGlobalLayout(IsoToleranzen.java:174)
12-18 23:19:06.850: E/AndroidRuntime(25262):    at android.view.ViewTreeObserver.dispatchOnGlobalLayout(ViewTreeObserver.java:682)
12-18 23:19:06.850: E/AndroidRuntime(25262):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1875)
12-18 23:19:06.850: E/AndroidRuntime(25262):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1131)
12-18 23:19:06.850: E/AndroidRuntime(25262):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4611)
12-18 23:19:06.850: E/AndroidRuntime(25262):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
12-18 23:19:06.850: E/AndroidRuntime(25262):    at android.view.Choreographer.doCallbacks(Choreographer.java:555)
12-18 23:19:06.850: E/AndroidRuntime(25262):    at android.view.Choreographer.doFrame(Choreographer.java:525)
12-18 23:19:06.850: E/AndroidRuntime(25262):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
12-18 23:19:06.850: E/AndroidRuntime(25262):    at android.os.Handler.handleCallback(Handler.java:615)
12-18 23:19:06.850: E/AndroidRuntime(25262):    at android.os.Handler.dispatchMessage(Handler.java:92)
12-18 23:19:06.850: E/AndroidRuntime(25262):    at android.os.Looper.loop(Looper.java:137)
12-18 23:19:06.850: E/AndroidRuntime(25262):    at android.app.ActivityThread.main(ActivityThread.java:4898)
12-18 23:19:06.850: E/AndroidRuntime(25262):    at java.lang.reflect.Method.invokeNative(Native Method)
12-18 23:19:06.850: E/AndroidRuntime(25262):    at java.lang.reflect.Method.invoke(Method.java:511)
12-18 23:19:06.850: E/AndroidRuntime(25262):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008)
12-18 23:19:06.850: E/AndroidRuntime(25262):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
12-18 23:19:06.850: E/AndroidRuntime(25262):    at dalvik.system.NativeStart.main(Native Method)
因为我得到了一个NullPointerException,似乎系统删除了变量。。。 但当我双击第三行时,eclipse会标记这一行:

int am_offset = list.getChildAt(0).getTop();
我无法解释这种行为,因为我在这一行设置了一个断点,当我恢复应用程序时,系统从不调用这个表达式。列表是一个列表视图。 当应用程序暂时不使用时,如何防止系统删除变量

有人能帮我吗


非常感谢

从我读到的内容来看,系统删除变量或多或少应该是独立的,因为系统做了它必须做的事情来保持设备性能。通过在活动的onResume中写入安全检查以重新创建任何丢失的变量,可以帮助避免这些NullPointerException和恢复状态。另外,如果它们保存的数据必须长时间保存,则可能对小值有一些用处,并且在有大量数据需要保存时也有一些用处。

好的,我有一个解决方案。我替换了int am_offset=list.getChildAt0.getTop;与:

现在我再也没有例外了

但是有人能给我解释一下,为什么系统会抛出异常,尽管int am_offset=list.getChildAt0.getTop;在恢复时从未调用


非常感谢

您在何处以及如何初始化列表?您希望getChildAt0返回什么?这可能是null吗?getChildAt应该引发异常。AdapterView不能有传统意义上的子视图。看起来这里有两个问题。一个是活动生命周期,另一个是如何使用adapterview.I在onCreate中初始化列表。使用getChildAt0.getTop,我希望获取第一个可见项及其不可见的px。当我第一次启动应用程序时,效果很好。这也很好,当我进入菜单并立即恢复时。但它不起作用,当我在恢复之前清理内存时……我认为问题是,在onResume中,系统不知道px,这是不可见的,可能它甚至不知道第一项,但这应该没问题,因为这个表达式只是由onClick事件调用的。我在这个位置设置了一个断点,调试模式确认int am_offset=list.getChildAt0.getTop;从未调用,但应用程序在此时崩溃。好的,我有一个解决方案。但还有一点我不明白。你能读一下我下面的回答并试着给出一个陈述吗?非常感谢。
View am_top = list.getChildAt(0);
am_offset = (am_top == null) ? 0 : am_top.getTop();