强制关闭应用程序时注销

时间:2016-01-08 09:23:21

标签: android authentication logic logout autologin

我想实现这个功能:如果用户选择了autoLogin CheckBox,清除登录用户信息并在应用程序正常退出或强行关闭时退出(清理内存)。

我编写代码clearAutoStart()以清除finish()OnDestory()中的用户信息。 当用户按两次后退按钮时,finish()将执行,并将注销成功。但是如您所知,如果申请人关闭,OnDestory()将不会一直执行。所以在这种情况下,它不会注销成功。

 @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    // TODO Auto-generated method stub
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        exitBy2Click();        //quit normal
    }
    return false;
}


private static Boolean isExit = false;

private void exitBy2Click() {
    Timer tExit = null;
    if (isExit == false) {
        isExit = true; 
        Toast.makeText(this, "press again to quit", Toast.LENGTH_SHORT).show();
        tExit = new Timer();
        tExit.schedule(new TimerTask() {
            @Override
            public void run() {
                isExit = false;  
            }
        }, 2000); 
    } else {
        finish();
        System.exit(0);
    }
}

@Override
protected void onDestroy() {
    clearAutoStart();
    super.onDestroy();
}

@Override
public void finish() {
    clearAutoStart();       
    super.finish();
}

@Override
protected void onStop() {
    Log.i("ws", "---->>SmarterActivity onStop");
    super.onStop();
}

public void clearAutoStart() {
    RememberUser rememberUser = RememberUser.getInstance();
    if (rememberUser.getIsAutoStart() == false) {
        Log.i("ws", "---->>clearAutoStart getIsAutoStart false ");
        UserLocalStore userLocalStore = UserLocalStore.getInstance();
        userLocalStore.setUserLoggedIn(false);
        userLocalStore.clearUserData();
        Log.i("ws", "---->>clearAutoStart getIsAutoStart false OK ");
    } else {
        Log.i("ws", "---->>clearAutoStart getIsAutoStart true ");
    }
}

我尝试在clearAutoStart()中添加onStop(),但这意味着如果我按下HOME按钮,应用程序将会退出。

1 个答案:

答案 0 :(得分:0)

当你按HOME onPause()被调用然后onStop()。

所以你可以放一个成员变量来跟踪发生的事情:

@Override
protected void onPause() {

    mIsPause = true;

    super.onPause();
}

@Override
protected void onStop() {
    Log.i("ws", "---->>SmarterActivity onStop");

    if(!mIsPause)
        clearAutoStart();

    super.onStop();
}