2017-05-20 39 views
0

这是一个问题我找不到解决方案:Android:“OnStop/OnDestroy”难题

我的应用程序创建一个虚假的位置对象。这需要在用户每次关闭应用程序时销毁。如果不是,它会保持完整,直到整个手机重新启动。现在

,我可以把一个DestroyLocationObject()函数中的OnDestroy()方法中,还没有 - 在某些情况下的OnDestroy永远不会被调用。即使用户完成完成应用程序。

但是,始终调用OnStop。 但问题是,OnStop将被调用,即使用户不想完全关闭该应用程序,但只是将其放入后台,然后稍后可能会返回。

我怎么能绝对确保,当应用程序被关闭我打造的位置对象将被销毁。不管它是如何关闭的?

+0

当用户把应用程序放在后台时,如果你没有调用finish(),OnPause会被调用。 –

+0

等待..解释这一点请进一步...我不明白,但它似乎是解决方案! – user8013509

+0

'onStop()'也不保证被调用。 'onPause()'是保证的最后拆解方法。 –

回答

0

是否有可能破坏在的onStop()方法的对象,并创建onRestart一个新的()

+0

谢谢!但不幸的是,该应用程序需要在后台创建假位置对象 – user8013509

+0

好的,以及onDestroy方法并不保证被调用。你应该检查https://developer.android.com/reference/android/app/Activity.html#onDestroy%28%29并在onDestroy上阅读:) – Dragan

+0

@ user8013509你不能依赖后台存在的活动。如果您需要在后台执行任何操作,请将其存放在“服务”中。 –

0

通常,要走的路是onStart创建对象并摧毁它onStop

这样一来,即使他们把应用程序在后台运行,它是当他们回来重新创建。

你想要做的是,如果Android是内存不足时,系统会破坏您的应用程序,还是要删除内存中对象的方式的问题。不要以为他们来的时候,你的对象将是一样的。

另一个想法,如果你需要同样的确切位置对象每次,使物体Serializable并保存它,所以你可以检索它下一次。

+0

谢谢!!!这很有帮助! – user8013509

0

只有在何种情况下onDestroy()不叫是当用户强制关闭您的应用程序,或者当框架杀死你的应用程序来释放内存。当这些事情发生时,整个虚拟机就会被销毁。所以,除非你坚持系统资源(文件,套接字等),否则无需清理。

0

当用户按下home按钮时会调用onPause。你应该把你的方法(DestroyLocationObject())放在onPause中。