我想实现这个功能:如果用户选择了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按钮,应用程序将会退出。
答案 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();
}