2012-07-15 65 views
2

我想知道处理应用程序超时的最佳方式(如PayPal)是什么。我希望用户选择1分钟,5分钟或15分钟的超时时间,因此当他们打开应用程序时,他们必须重新登录。在Android中创建和处理应用程序超时

我的onResume方法:

​​

它什么也没有。但它崩溃。

作为说明:我的应用程序有两个活动。第一项活动是登录屏幕。第二个活动是主屏幕。 onResume方法在第二个活动中。

+0

你试过了什么?知道你到目前为止使用的方法将帮助我们确定最适合你的方法。 – Eric 2012-07-15 22:18:15

+0

如果身份验证基于HTTP传输(一个android客户端 - http服务器通信),那么最好在http级别(通过http API,像HttpClient)管理会话超时,而不是在应用程序的UI级别。 – yorkw 2012-07-15 22:41:52

+0

我只尝试过一种方法,那就是有一个开始“路由”活动。它会根据您离开应用程序的时间长短将您路由到适当的屏幕。此外,为了回应约克,这个应用程序完全是本地的,没有外部连接。 – EGHDK 2012-07-15 23:04:08

回答

8

我做这在我的应用程序之一:

你需要一个基础的活动为您的所有活动将延长。在此基本活动中,添加一个跟踪“上次用户活动”时间戳记的变量。就我而言,用户活动仅仅意味着他们触摸屏幕。因此,重写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 
    } 
} 
+0

我添加了'dispatchTouchEvent',并添加了'onResume'方法。但是,我的应用程序正在冒泡。我在if语句中敬酒。我的错误消息似乎是'RuntimeException:无法恢复活动'。有任何想法吗? – EGHDK 2012-08-01 19:14:34

+0

你可以发布你的onResume()方法,并指出它崩溃的那一行吗? – azgolfer 2012-08-01 20:02:20

+0

是的,更新了我的问题。谢谢 – EGHDK 2012-08-01 20:11:56

0

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

相关问题