Android操作系统调用的检索内存的方法?如何模拟?

Android操作系统调用的检索内存的方法?如何模拟?,android,debugging,background,singleton,application-restart,Android,Debugging,Background,Singleton,Application Restart,编辑: 所以这篇文章是关于如何快速加载Android操作系统,当我用重启路径从后台调用它时,让我的应用程序以某种方式重启,以便在从后台重启时调试偶尔的崩溃 我在下面提供了我对这个主题的理解/猜测,完全没有任何保证 当应用程序处于后台时,我看到了3种状态: 应用程序被“刚刚”发送到后台,当您调用它时,它会毫不费力地重新出现(所有内容仍在内存中) 这个应用程序花了相当长的时间在后台,或者android操作系统的压力已经够大了,对我来说,开始了一个繁重的游戏(Euforia,随便浏览一千张图片,看看

编辑:


所以这篇文章是关于如何快速加载Android操作系统,当我用重启路径从后台调用它时,让我的应用程序以某种方式重启,以便在从后台重启时调试偶尔的崩溃 我在下面提供了我对这个主题的理解/猜测,完全没有任何保证

当应用程序处于后台时,我看到了3种状态:

  • 应用程序被“刚刚”发送到后台,当您调用它时,它会毫不费力地重新出现(所有内容仍在内存中)

  • 这个应用程序花了相当长的时间在后台,或者android操作系统的压力已经够大了,对我来说,开始了一个繁重的游戏(Euforia,随便浏览一千张图片,看看groupon&Gmail就搞定了)。在这种情况下,它是从后台回调,操作系统尝试将最后一个视图放到前面,并调用RestoreSavedInstance()

  • 太多的时间在后台,或崩溃,或巨大的负载。。。无论如何,当从后台调用时,应用程序将完全重新启动(根本不调用onRestoreSavedInstance(),而是调用不带savedinstance捆绑包的onCreate和Cie)

诀窍是在onSavedInstance()中保存案例2中可能删除的内容,并在onRestoreSavedInstance()中检索该内容。 但是您必须在onStart()方法之后调用这些保存的变量、属性和参数(当然,可能是片段的活动)。这是强制性的,因为调用onRestoreSavedInstance()方法的过程很晚:在活动的onStart()之后。Cf谷歌文档:

您可以选择实现onRestoreInstanceState(),而不是在onCreate()期间恢复状态,系统在onStart()方法之后调用onRestoreInstanceState()。仅当存在要还原的已保存状态时,系统才会调用onRestoreInstanceState(),因此您无需检查捆绑包是否为空:

因此,由于片段和活动生命周期之间的关系,您不能在片段的onResume()方法之前引用任何内容:

这就是最终的更正者欢迎:)
谢谢大卫

/******编辑鳍*****/

我必须升级的应用程序(帮助朋友启动)从后台返回时崩溃,如果它在后台的时间足够长的话。如果:

  • 我从应用程序管理器中删除它
  • 我长按home(主页)按钮就把它关掉了
  • 在使用了其他几个应用程序(Euforia、temple run 2、gmail、endomondo)后,我又重新调用了它
  • 我在网上找到或想到的所有案例
它崩溃的唯一途径就是在这样的时间之后,作为背景出现。两位客户也报告了此问题

我已经阅读了几篇关于这些主题的文章和谷歌文档,尤其是这篇来自/u/commonware的文章 还有这些

我真的希望得到一些帮助,即使它本身不是很关键

*为什么它只是在长时间(一个小时)和/或应用程序使用过度后才崩溃,如果杀死应用程序的方式与Commonware所说的相同?还是这些事故与其他问题有关

*开发人员,您如何模拟长时间休息来测试这一点?如果我希望解决这个问题,我需要重现这个崩溃。这可能是一个单身问题,我看到人们在谈论它

我真的很感激智慧和指导

编辑:

这是坠机的记录

  06-10 16:08:32.178: I/ActivityThread(26487): Pub com.snapcar.rider: com.snapcar.rider.provider.SCProvider
06-10 16:08:32.298: D/dalvikvm(26487): GC_CONCURRENT freed 255K, 10% free 12336K/13703K, paused 12ms+1ms, total 27ms
06-10 16:08:32.393: V/Localytics(26487): Opening new session
06-10 16:08:32.423: D/dalvikvm(26487): GC_CONCURRENT freed 219K, 10% free 12650K/13959K, paused 1ms+2ms, total 27ms
06-10 16:08:32.423: D/dalvikvm(26487): WAIT_FOR_CONCURRENT_GC blocked 14ms
06-10 16:08:32.423: W/CursorWrapperInner(26487): Cursor finalized without prior close()
06-10 16:08:32.448: D/SC - Auth(26487): Auth-instantiating AuthManager...
06-10 16:08:32.453: D/SC - BookingManager(26487): BookingManager-instantiating BookingManager...
06-10 16:08:32.518: D/SC - WebServiceManager(26487): WebServiceManager-ws type: preprod
06-10 16:08:32.518: D/SC - OtherUtils(26487): OtherUtils-language:fr
06-10 16:08:32.523: E/SC - SCMainActivity(26487): savedInstanceState != null, the application is RE-created
06-10 16:08:32.543: D/dalvikvm(26487): GC_CONCURRENT freed 226K, 10% free 12913K/14215K, paused 11ms+14ms, total 38ms
06-10 16:08:32.628: D/dalvikvm(26487): GC_CONCURRENT freed 145K, 9% free 13307K/14535K, paused 2ms+2ms, total 20ms
06-10 16:08:32.673: D/AndroidRuntime(26487): Shutting down VM
06-10 16:08:32.673: W/dalvikvm(26487): threadid=1: thread exiting with uncaught exception (group=0x40fd82a0)
06-10 16:08:32.678: E/AndroidRuntime(26487): FATAL EXCEPTION: main
06-10 16:08:32.678: E/AndroidRuntime(26487): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.snapcar.rider/com.snapcar.rider.SCMainActivity}: java.lang.NullPointerException
06-10 16:08:32.678: E/AndroidRuntime(26487):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100)
06-10 16:08:32.678: E/AndroidRuntime(26487):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
06-10 16:08:32.678: E/AndroidRuntime(26487):    at android.app.ActivityThread.access$600(ActivityThread.java:140)
06-10 16:08:32.678: E/AndroidRuntime(26487):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
06-10 16:08:32.678: E/AndroidRuntime(26487):    at android.os.Handler.dispatchMessage(Handler.java:99)
06-10 16:08:32.678: E/AndroidRuntime(26487):    at android.os.Looper.loop(Looper.java:137)
06-10 16:08:32.678: E/AndroidRuntime(26487):    at android.app.ActivityThread.main(ActivityThread.java:4898)
06-10 16:08:32.678: E/AndroidRuntime(26487):    at java.lang.reflect.Method.invokeNative(Native Method)
06-10 16:08:32.678: E/AndroidRuntime(26487):    at java.lang.reflect.Method.invoke(Method.java:511)
06-10 16:08:32.678: E/AndroidRuntime(26487):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
06-10 16:08:32.678: E/AndroidRuntime(26487):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
06-10 16:08:32.678: E/AndroidRuntime(26487):    at dalvik.system.NativeStart.main(Native Method)
06-10 16:08:32.678: E/AndroidRuntime(26487): Caused by: java.lang.NullPointerException
06-10 16:08:32.678: E/AndroidRuntime(26487):    at com.snapcar.rider.fragment.BookingFormFragment.onCreateView(BookingFormFragment.java:332)
06-10 16:08:32.678: E/AndroidRuntime(26487):    at android.support.v4.app.FragmentManagerImpl.moveToState(Unknown Source)
06-10 16:08:32.678: E/AndroidRuntime(26487):    at android.support.v4.app.FragmentManagerImpl.moveToState(Unknown Source)
06-10 16:08:32.678: E/AndroidRuntime(26487):    at android.support.v4.app.FragmentManagerImpl.moveToState(Unknown Source)
06-10 16:08:32.678: E/AndroidRuntime(26487):    at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(Unknown Source)
06-10 16:08:32.678: E/AndroidRuntime(26487):    at android.support.v4.app.FragmentActivity.onStart(Unknown Source)
06-10 16:08:32.678: E/AndroidRuntime(26487):    at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1167)
06-10 16:08:32.678: E/AndroidRuntime(26487):    at android.app.Activity.performStart(Activity.java:5216)
06-10 16:08:32.678: E/AndroidRuntime(26487):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2073)
06-10 16:08:32.678: E/AndroidRuntime(26487):    ... 11 more
编辑2:

riderID=Integer.parseInt(UserManager.getSharedInstance().getCurrentRider().getUniqueID())

这次是这条线路坠毁了,我不确定它是否一直在这里。但这(会)证实我指的是单例还是丢失的值?为了应对这一情况,我今天上午尝试实施了一个共享首选项,保存了以下帖子和指南:

@覆盖
SaveInstanceState上的公共无效(Bundle savedInstanceState){
Dbg.e(标记为“onSavedInstance”);
if(UserManager.getSharedInstance().getCurrentRider()!=null){
Dbg.d(标记“我们有一个当前的骑手”);
Rider currentRider=UserManager.getSharedInstance().getCurrentRider();
savedInstanceState.putString(Rider.UNIQUEID_键,currentRider.getUniqueID());
(已保存更多属性)

问题是这里没有调用Fontion onREstoreSavedInstance。这就像用户界面创建得太快一样

我应该怎么做?稍后在片段的调用过程中重新定义UI

或者是有一个更复杂的问题,而这只是一个突破点(如果我在这里解决它,应用程序稍后就会崩溃?)

谢谢你的帮助和支持!这真的给了我继续前进的勇气

编辑2:这是我的检索功能:

public void onRestoreInstanceState(Bundle savedInstanceState) {
    Dbg.d(TAG,"the application is RE-created & called from onRestoreInstanceState");

    // Always call the superclass so it can restore the view hierarchy
    super.onRestoreInstanceState(savedInstanceState);

    // Restore state members from saved instance
    if (UserManager.getSharedInstance().getCurrentRider() == null) {
        Rider currentRider = new Rider();
        currentRider.setUniqueID(savedInstanceState.getString(Rider.UNIQUEID_KEY));
   }}
(更多设置)

我只是注意到我没有编写Override&我没有将创建的rider设置为UserManager。因此,在我正在做的一些其他证明中调用了该方法。我现在添加了这两个。我重新测试

编辑3-4

骑手是空的:

06-10 17:05:14.248: E/SC - BookingFormFragment(837): it's the CurrentRider that is null  !!!

首先,您是否实现了onResume()和onRestart()方法

另一种方法是,如果你的应用程序需要登录(Facebook、Google+、own service…),你可能会收到一个令牌,该令牌必须在一段时间后过期。恢复时,你必须询问一个新的令牌密钥

请发布日志以获取更多帮助


Adrien

所以这篇文章是关于如何快速加载Android操作系统,当我用重启路径从后台调用它时,让我的应用程序以某种方式重启,为了调试从后台重启时偶尔发生的崩溃,我在下面提供了我对这个主题的理解/猜测,但没有任何保证

当应用程序处于后台时,我看到了3种状态:

该应用程序是“刚刚”发送到后台的,当您将其回调时,它会毫不费力地重新出现(一切都很简单)