我的应用程序在暂停和onRestoreInstanceState

时间:2015-11-28 18:12:48

标签: java android android-fragments onrestoreinstancestate

好的家伙我真的需要一些帮助在这里我有一个已发布的应用程序自动检查和我的Droid 4在现实世界的使用按下我的手机上的物理主页按钮暂停应用程序的时间,它在崩溃后调用onRestoreInstanceState。我能弄清楚的最多的是我回来的片段有一个按钮"添加新车"单击该按钮时单击时更新下一个片段会崩溃。我认为是因为第三个片段的片段状态丢失了。该应用程序始终完美无缺,直到它暂停一段时间。这是我的堆栈跟踪:

    java.lang.NullPointerException
at pete01507.AutoInspection.af.a(Unknown Source)
at pete01507.AutoInspection.MainActivity.a(Unknown Source)
at pete01507.AutoInspection.ae.onClick(Unknown Source)
at android.view.View.performClick(View.java:4106)
at android.view.View$PerformClick.run(View.java:17052)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5059)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
at dalvik.system.NativeStart.main(Native Method)

任何帮助将不胜感激。感谢

这是onRestoreInstanceState:

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    Log.d(TAG, "onRestoreInstanceState");
    if (savedInstanceState == null) {
        Log.d(TAG, "Restore onSaveInstanceState was empty");
        car="";
        fresh=false;
    }else{
        Log.d(TAG, "Restore onSaveInstanceState else was not empty");
        car = (String) savedInstanceState.get("car");
        load();
        mViewPager.setCurrentItem(savedInstanceState.getInt("vp"));
    }
    }

这是onSaveInstanceState:

    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    Log.d(TAG, "onSaveInstanceState");
    if (car.equals("")){
        Log.d(TAG, "onSaveInstanceState car not loaded");
    } else {
        Log.d(TAG, "onSaveInstanceState car is loaded");
        savedInstanceState.putString("car", car);
        savedInstanceState.putInt("vp", mViewPager.getCurrentItem());
    }
    }

更新:我在ViewPager上有一个带有七个静态片段的MainActivity,活动没有任何视图或页面,因此当应用程序启动时,第一页是第一个片段。我删除了对回调接口的所有调用,以便在" + New Vehicle"时更新第三个片段。单击按钮此按钮位于第二个片段中。现在应用程序可以正常运行而不会崩溃但是片段#3没有更新。回调界面仍然会更新第一个片段而不是第三个片段,因为某些原因我还没弄清楚是应用程序被内存运行不足的Android杀死后再次点击该应用程序使用它第三个并且不再可以通过接口访问其余的片段。那么我将如何重新启动片段,就像第一次安装应用程序时启动应用程序一样,或者这个应用程序有一个退出按钮调用context.finish按下退出按钮后接口再次工作?

1 个答案:

答案 0 :(得分:0)

太糟糕了我无法评论,因为我不确定这一点,但是!我记得我有类似的问题,这对我来说听起来很熟悉。所以我打开了我制作的一个应用程序的2或3年的源代码。我写了一篇评论。

  

如果应用程序通过主页按钮进入后台,并且Android正在获取   在RAM之外,它会杀死应用程序,但会保存活动堆栈和实例   捆绑的状态。当应用程序再次打开时,它无法启动   启动器活动,但最后一个活动堆栈,和   从其他活动传递给它的值将丢失。

那么,在您的某个活动中,您是否期望某些值在 onCreate 或其他调用 getIntent()的地方不为空?

不确定这一点,但我知道这是多么令人沮丧所以我希望你找到这个错误的运气。