【发布时间】:2013-10-12 08:48:06
【问题描述】:
我有一个应用程序(许多活动)。当应用程序进入后台时,我想清除一些值,例如用户凭据。我怎么知道应用程序何时进入后台?我试图拦截主页按钮,但似乎我们不能这样做。如果我调用 onPause(),每次我从一个活动移动到另一个活动时都会调用它。我搜索了很多,但没有得到任何具体的东西。
请帮忙
【问题讨论】:
标签: android background android-activity
我有一个应用程序(许多活动)。当应用程序进入后台时,我想清除一些值,例如用户凭据。我怎么知道应用程序何时进入后台?我试图拦截主页按钮,但似乎我们不能这样做。如果我调用 onPause(),每次我从一个活动移动到另一个活动时都会调用它。我搜索了很多,但没有得到任何具体的东西。
请帮忙
【问题讨论】:
标签: android background android-activity
我认为您有两种方法可以实现您的目标,一种是在包含您的数据的 Activity 的 onStop() 状态中清除您的数据,另一种方法是(正如您提到的)Catching Home Press 事件。
为了检测主页新闻事件,您应该覆盖:onAttachedToWindow()
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
}
然后清除您的数据:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_HOME)
{
//Put your Codes here to Clear Data
}
});
【讨论】:
这对于 Android 来说是困难的,因为没有对进入后台的应用程序的具体定义。仅检测 home 键是不够的,因为还有许多其他事件会导致您的应用失去焦点。
例如,来电会导致您的应用“进入后台”,但对用户而言,情况似乎并非如此。
实现您想要的一种可能方法是使用活动的 OnPause 和 OnResume 方法与应用程序类中的服务或简单任务进行通信。 (与您的活动无关的任何内容)。
当 OnPause 被调用时,启动一个计时器。调用 OnResume 时,停止计时器。
如果计时器在特定时间段内没有停止,那么您会认为应用程序“在后台”并可以清除数据。
留出足够的时间来处理简单的更改,例如上面的来电示例。可能需要一两分钟,具体取决于您的情况。
【讨论】: