如何优雅地关闭后台应用程序?

时间:2011-09-11 21:34:39

标签: android

我有一个应用程序,如果在后台闲置120秒,我想自行终止。例如,假设我正在使用我的应用程序,然后点击HOME键然后点击浏览器图标,当浏览器应用程序位于前台时,我的应用程序将被推送到后台。我有一个Runnable计时器,120秒后会调用:

 Intent intent;
 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
 myActivity.startActivity(intent);

在我的myActivity类中,用于onCreate()方法我调用finish()来关闭该应用程序(如果设置了全局标志)。

这很好用,除非我在我的后台应用程序关闭时使用浏览器应用程序,浏览器应用程序被发送到后台,我只看到我的主屏幕页面。我推测这是因为我的应用程序在关闭之前会弹出前景几秒钟,这会导致浏览器应用程序被推送到后台。

我知道还有其他杀死我的工作的方法(例如,System.exit(0)),但是,当我尝试使用该方法时,如果我之后尝试再次运行我的应用程序,则会收到“强制关闭”错误消息。我也明白不建议使用System.exit()方法,因为它不会像调用finish()一样清理我的应用程序。

任何人都知道如何在后台优雅地关闭我的应用程序,而不会影响前台运行的应用程序?

感谢。

4 个答案:

答案 0 :(得分:2)

如果计时器已过期,您可以签入onResume()方法。如果是,您可以简单地将数据设置为emtpy并调用finish()

答案 1 :(得分:0)

当程序失去焦点时,您可以使用onPause()方法执行任务。 http://developer.android.com/reference/android/app/Activity.html#onPause()

然后,您可以使用Timer课程在一段时间后拨打finish

答案 2 :(得分:0)

您的进程一直在后台运行,它不会以任何方式“停止”或“暂停”(只有UI应该处于非活动状态)。所以你可以发布一个计时器等,它会在适当的时间间隔后调用你的活动完成。

答案 3 :(得分:0)

我相信你可以调用FLAG_ACTIVITY_CLEAR_TOP as.an意图标志,除了从该意图开始的活动之外的所有活动都将被销毁,然后你也可以在那个上调用finish()并100%退出。