Android 自动注销应用程序

Android 自动注销应用程序,android,Android,我正在尝试实现自动注销功能。如果应用程序在1小时内未使用,我希望自动将用户带到登录屏幕。当手机被锁定时,监控应用程序是否正在使用的线程似乎不会继续。我的代码如下: /** * This Deamon checks if the application is idle and */ private class LogoutDeamon extends Thread { public void run() { while (!logoutDeamon) {

我正在尝试实现自动注销功能。如果应用程序在1小时内未使用,我希望自动将用户带到登录屏幕。当手机被锁定时,监控应用程序是否正在使用的线程似乎不会继续。我的代码如下:

/**
 * This Deamon checks if the application is idle and 
 */
private class LogoutDeamon extends Thread {

    public void run() {

        while (!logoutDeamon) {
            try {
                System.out.println("Logout Counter:" + logoutConter);
                if (logoutConter <= 0) {
                    logoutDeamon = true;
                ApplicationManager.getInstance().setLoggedOut(true);
                   ApplicationManager.getInstance().Log(Level.INFO, "Auto Log out");
                   logout();
                } else {
                    decreamentCounter();
                }
                sleep(60000 * 1);
            } catch (ParserException ex) {
                Log(Level.ERROR, " Par. Ex. in Logout-Deamon:" + ex.getMessage());
                logout();

            } catch (ServerException ex) {
                Log(Level.ERROR, " Ser. Ex. in Logout-Deamon:" + ex.getErrorMessage());
                logout();
            } catch (InterruptedException ie) {
                Log(Level.ERROR, "Int. Ex. in Logout-Deamon:" + ie.getMessage());
            } catch (Exception ex) {
                Log(Level.ERROR, "Erro in Logout-Deamon:" + ex.getMessage());
                logout();
            }
        }
    }

    private void logout(){
        Intent broadcastIntent = new Intent();
        broadcastIntent
                .setAction("com.package.ACTION_LOGOUT");
        applicationContext.sendBroadcast(broadcastIntent);

        Intent loginIntent = new Intent(applicationContext,
                Login.class);
        loginIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        applicationContext.startActivity(loginIntent);
    }

}
/**
*此Deamon检查应用程序是否空闲,以及
*/
私有类LogoutDeamon扩展线程{
公开募捐{
而(!logoutDeamon){
试一试{
System.out.println(“注销计数器:“+logoutConter”);

如果(logoutConter我认为您不需要线程。请在onPause中注册时间。如果1小时已过,请在onResume测试中注册时间。否则,请重置计时器。

我遇到的问题是时间因素不固定。我从服务器获取注销周期。因此,我将线程休眠一分钟并减少计时器。线程是否会进入pause state如果手机被锁定?当设备进入睡眠模式时,线程将停止执行。无论如何,当设备进入睡眠状态或用户关闭应用程序时,将调用onPause。当应用程序再次启动时,将调用onResume。这两种方法应足以实现您的业务逻辑-无线程c需要计算时间。谢谢。是否应该在所有活动中实现此逻辑?因为我的应用程序中有多个活动?是的,您应该在所有活动中添加此逻辑。例如,您可以使用从所有活动访问的单例类。可能会为您的一个活动调用onPause然后马上开始你的另一份简历。这应该不是问题。我也会试试。谢谢。