Android:启动服务后停止活动

时间:2013-01-20 20:00:55

标签: android android-intent android-activity android-service

我的代码中有以下流程:

 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?"

此视图将有一个“停止并重启”按钮,以执行相应的任务。

我的问题:

  1. 如果安全地按下Back或Home,如何在活动4中停止活动1-4?我的想法是为每个活动添加static stopActivity()方法,并从活动4 Activity[1-3].stopActivity()onBackPressed()调用onPause()。然后在每个stopActivity()内,我会调用finish(),从而结束每个活动。但这样做是否安全有效?

  2. 我上面说明的流程,它是最佳的做事方式,还是有更清洁的方式?我在这些活动中注册BroadcastReceivers,因此我需要为每个活动执行干净退出,没有泄露的接收器,或者更糟糕的是,由于不干净的退出策略而导致应用程序崩溃或影响用户的手机。

  3. 感谢您的建议。

1 个答案:

答案 0 :(得分:0)

  1. 您无需停止活动,Android会为您执行此操作。使用带有标记FLAG_ACTIVITY_NO_HISTORY的意图开始您的活动,以便在用户按下时不显示它们。一旦用户离开,这些活动就会停止。

  2. 在您的每个活动的onStop方法中,如果您想要手动释放某些内容,请编写要释放内存的任何代码,尽管这不是必需的,因为Android会解除分配它设备内存不足时自己动手。在这些onStop方法中,取消注册之前注册的任何BroadcastReceiver