我有一个activity的onCreate方法调用Init函数(该函数调用一些涉及很多东西的本地代码并调用openSLES音频api)。问题的关键是,这个Init函数在再次调用时会导致应用程序崩溃,这种情况发生在屏幕旋转上,或者当我使用Back按钮关闭该活动并重新启动它时(但是如果在此期间该进程被终止,我没有麻烦)。我无法改变Init函数的承载。如何检查onCreate以前的android进程是否一样被杀死?
我发现当活动被破坏时我没有杀死这个进程,我在阅读文档后期待这样做,这是一件好事,因为 - 如果有一些音频信号正在播放 - 在活动结束后继续播放破坏了,这对我的目的有好处。
我试图执行使用了的onSaveInstanceState初始化状态的检查,但效果很好只能在屏幕旋转,当是的onSaveInstanceState叫那。当我按下后退按钮时,不会调用回调。
,所以我尝试使用共享偏好,执行状态的onPause节约。但是在这一点上,我有相反的问题:如果进程被终止,共享首选项值将保留,但在这种情况下,我需要再次执行Init以使应用程序正常工作。
我想我需要一种方法来知道,如果一个进程终止或不后创建我的活动,但此刻我看不出。我想在onPause方法中使用bundle实例,但我无法确定这是否可行。任何类型的提示都会非常感激。
你不能在onPause/init onResume中释放那个东西吗?应该只有一个实例处于这种状态。或者把整个东西变成一个服务,因为这些东西总是单个实例 – zapl 2012-04-23 16:53:32
我不能释放“那个东西”(这是一个很好的方式来命名:)),既不在onPause也不在其他任何地方,我只能依靠它在进程终止后安全地调用。服务选项听起来像是对我的需求矫枉过正,但我开始考虑它。 – athos 2012-04-23 17:04:10
一个简单的本地(意图)服务只是一些代码行,你可以在一个活动中启动它,在下一个活动中停止它,因为它的生命周期不与活动相关联。它们非常适合背景音乐等不会中断的事物。尝试解决Activity生命周期当然是可能的,但我不认为这是一个干净的解决方案。 – zapl 2012-04-23 17:09:31