3

我想知道处理应用程序超时的最佳方法是什么,例如 PayPal。我希望用户在 1、5 或 15 分钟的超时时间之间进行选择,因此当他们打开应用程序时,他们必须再次登录。

我的 onResume 方法:

@Override
    public void onResume() {

    } 

它里面什么都没有。但它崩溃了。

注意:我的应用程序有两个活动。第一个活动是登录屏幕。第二个活动是主屏幕。onResume 方法在第二个活动中。

4

2 回答 2

9

我在我的一个应用程序中做到了这一点:

您需要一个基础 Activity,您的所有 Activity 都将从该基础 Activity 扩展。在此基本活动中,添加一个变量来跟踪“上次用户活动”时间戳。在我的例子中,用户活动仅仅意味着他们触摸了屏幕。所以重写 dispatchTouchEvent(MotionEvent ev) 方法,并将“最后一个用户活动”设置为当前时间戳。

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    lastActivity = new Date().getTime();
    return super.dispatchTouchEvent(ev);
}

然后在此基本活动的 onResume() 方法中,只需将当前时间戳与“上次用户活动”时间戳进行比较。如果超过 1、5 或 15 分钟(可由用户配置),则启动另一个活动以要求用户登录。

@Override
public void onResume() {
    long now = new Date().getTime();
    if (now - lastActivity > xxxx) {
       // startActivity and force logon
    }
} 
于 2012-07-15T22:25:28.710 回答
0

我会在应用程序运行并处于活动状态时使用心跳计时器,并跟踪当前时间(或上次活动时间 - 任一时间)。当应用程序从用户点击主页按钮进入后台时(或退出 - 不确定您如何处理后退按钮) - 通过将其保存到共享首选项来记住该值。当应用程序启动或恢复时,您可以将当前时间与保存的时间进行比较,如果增量大于“x”,那么您可以将用户引导至登录屏幕。确保您在主要活动中关注 onPause、onResume、onStop、onDestroy 事件。我会亲自使用 System.currentTimeMillis 作为时间戳,然后根据您的时间(秒、分钟等)比较毫秒并适当划分。

于 2012-07-15T22:18:49.040 回答