为什么在应用程序“退出”时调用OnCreate(),这会导致我的初始化代码多次运行

时间:2011-09-11 03:48:16

标签: java android

所以这应该很容易我确信我只是遗漏了一些东西。

在我的OnCreate()方法中,我完成了大部分游戏的启动(哦,就像我制作游戏一样!)... 在OnCreate中我创建了一个Panel,它是一个扩展视图的类,负责所有显示。在这个面板的构造函数中,我更新了一些带有要显示的对象的链表,这些对象可以在面板中移动(我可以单击一个对象,单击一个新点,然后将对象移动到那里)这一切都正常! / p>

现在,如果我按下主页按钮离开我的应用程序,然后回来,android会记住我离开我的对象的位置,并将它们保留在那里!怎么样的Android。 但是当我按下后退按钮离开我的应用程序时会出现问题(我猜这更像是杀死它,这意味着下次我的应用程序启动时会调用OnCreate()。(我知道如果我只是调用OnCreate()点击主页按钮,但只有当手机需要一些空间并杀死我的应用程序时) 无论如何,当再次调用OnCreate时,Android会如此友好地记住我移动的对象所在的位置,但它会做其他事情,它会回忆起我的所有初始化代码,因此在原始位置存在重复的对象(也就是现在有两倍的对象) ).. 我该如何解决?我试过这个,

 if(savedInstanceState!=null) //see if android saved the state
       {
                 super.onCreate(savedInstanceState); //reload the state
           }
   else{
   super.onCreate(savedInstanceState); //I pass this savedinstancestate to OnCreate here even 
//though it is null,
//because I do not know what else to pass
//then i do the initilization crap all over again (because the savedinstancestate should have been 
//null and therefore it shouldnt display any saved data locations,
// but.... YET IT DOES!!!
}

请帮帮我!如何阻止它保存状态EVER并始终让我按照我想要的方式加载它或如何制作它以便在游戏重新加载状态时仅调用我的初始化代码? 谢谢!!

1 个答案:

答案 0 :(得分:0)

每次第一次创建活动/对话框/服务时,都会调用

onCreate()。 savedInstance参数实际上不是 android 保存的东西 - 这是你的工作。请注意,创建可能由于多种原因而发生,包括旋转屏幕时。您可以在 AndroidManifest.xml 文件中翻转您定义活动的位置。

另一个问题是当你的活动失去焦点时你会做什么,比如,它被推到了后台。如果您查看Activity的图表,您会发现当您按下主页时,您的应用程序通常不会关闭。 Android是一个多任务环境,因此隐藏应用并不一定意味着它会被关闭,但您可以这样做,例如在 onStop()方法中调用 finish() (或者甚至在 onPause()中,如果你想要任何对话框,包括短信弹出窗口,来杀死你的应用程序)。

如果您需要保存活动的配置(稍后将作为 savedInstanceState 传递,您应该覆盖 onRetainConfiguration()调用 - 这不是Android的工作要做这个(默认情况下没有保存,所以你的配置大多数时间都是空的)

所以基本上,如果你希望你的应用程序按照你期望的方式编写,你应该这样做:

  • 使用 onRetainConfiguration()保存对象的位置
  • onStop()方法中调用完成()
  • onCreate()方法中查看 savedInstanceState 以恢复对象

将解决您的所有问题。

相关问题