我的代码中有以下流程:
Activity1 : startActivity(Activity2) --->
Activity2: startActivity(Activity3) --->
Activity3: startService(MyService) --->
MyService: startActivity(Activity4)
上面的每个活动都显示一个视图,代表一个4步设置中的步骤。最终的活动 - Activity 4
- 在MyService
内完成一些设置工作后启动,基本上告诉用户,
"The service has started, you can close the application by pressing Back or Home button"
当用户按下Back或Home时,我想要销毁Activities 1-4
,并且只运行MyService
。此外,在如上所述停止应用程序后,当用户通过菜单导航回应用程序并启动它时,我将检查MyService
是否已在运行。如果它已经在运行,我不想展示Activities 1-3
,我想展示另一个Control Panel View
(另一个活动),其中说明了
"Dude, the service is already running, do you want to Stop or Restart it?"
此视图将有一个“停止并重启”按钮,以执行相应的任务。
我的问题:
如果安全地按下Back或Home,如何在活动4中停止活动1-4?我的想法是为每个活动添加static stopActivity()
方法,并从活动4 的Activity[1-3].stopActivity()
或onBackPressed()
调用onPause()
。然后在每个stopActivity()
内,我会调用finish()
,从而结束每个活动。但这样做是否安全有效?
我上面说明的流程,它是最佳的做事方式,还是有更清洁的方式?我在这些活动中注册BroadcastReceivers
,因此我需要为每个活动执行干净退出,没有泄露的接收器,或者更糟糕的是,由于不干净的退出策略而导致应用程序崩溃或影响用户的手机。
感谢您的建议。
答案 0 :(得分:0)
您无需停止活动,Android会为您执行此操作。使用带有标记FLAG_ACTIVITY_NO_HISTORY的意图开始您的活动,以便在用户按下时不显示它们。一旦用户离开,这些活动就会停止。
在您的每个活动的onStop
方法中,如果您想要手动释放某些内容,请编写要释放内存的任何代码,尽管这不是必需的,因为Android会解除分配它设备内存不足时自己动手。在这些onStop
方法中,取消注册之前注册的任何BroadcastReceiver
。