我有一个包含多个活动的应用程序,并且在我的MainActivity上的onPause中有一些行为,我不希望在切换到另一个活动时发生这种行为。
现在每当我切换活动时,都会调用MainActivity onPause()并且它总是运行行为。
答案 0 :(得分:0)
这里是一个解决方案(有点脏),您可以使用布尔值来了解您何时切换活动,在致电true
之前将其设置为startActivity(intent)
,并在false
中将其设置为onResume()
。
P.S,在您的情况下使用onStop()
优于onPause()
,我相信您不希望在活动部分可见时删除这些Cookie
答案 1 :(得分:0)
活动生命周期紧密协调,因此当从活动A启动一个活动B时,将发生以下生命周期事件:ActivityA.onPause,ActivityB.onCreate,ActivityB.onStart,ActivityB.onResume,ActivityA.onStop。你绝对可以利用这种生命周期协调来实现你想要的,如果你感动了你的行为,那么你就可以了。到生命周期方法onStop(这是一个更好的关闭/停止工作的地方)。
创建一个生命周期注册商对象,该对象将执行"行为"当Lifecycle注册器对象中没有注册任何活动时。在onStart()和onStop()liefycle回调中注册您的活动。在您的Lifecycle注册对象的deregister方法内部,检查是否有任何已注册的对象,如果他们没有执行您的行为"无论可能是什么。您可以扩展此功能以使用服务,只需分别在Service的onCreate,onDestroy中注册和注销服务与Lifecycle注册器。
使用onStop而不是onPause,还有一个额外的好处,就是让您不会停止/停止"行为"当应用程序实际上在后台而不仅仅是部分可见时,例如系统显示对话框的情况。例如,当请求启动蓝牙时,Android操作系统将生成一个提示用户的对话框,并调用onPause。这使得对于某些应用程序而不是所有应用程序,并且当您考虑它时,还有各种其他用例会导致应用程序进入onPause(),这会让用户厌烦您的应用程序执行关机过程
我个人利用这个方案来维持一个开放的连接,同时应用程序打开并在应用程序被杀或关闭后关闭连接。我甚至修改了Lifecycle Registrar对象以在设备轮换期间保持连接。