我的要求是,如果用户长时间不活动,比如5分钟,那么用户将自动注销应用程序,并上传登录和登出日志到服务器。
我尝试了上面链接中的所有答案,但是那些答案只适用于单个Activity,而我想要跟踪多个Activity。
为此,我创建了一个抽象类。
public abstract class SessionTimeOutActivity extends BaseActivity {
public static final long DISCONNECT_TIMEOUT = 1000 * 60; // 5 min = 5 * 60 * 1000 ms
private static Handler disconnectHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
Log.d("SessionTimeOutActivity", "disconnectHandler");
return false;
}
});
private Runnable disconnectCallback = new Runnable() {
@Override
public void run() {
// Perform any required operation on disconnect
Log.d("SessionTimeOutActivity", "disconnectCallback");
Toast.makeText(getApplicationContext(), "Session time out", Toast.LENGTH_LONG).show();
Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
startActivity(intent);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
finish();
}
};
public void resetDisconnectTimer() {
disconnectHandler.removeCallbacks(disconnectCallback);
disconnectHandler.postDelayed(disconnectCallback, DISCONNECT_TIMEOUT);
}
public void stopDisconnectTimer() {
disconnectHandler.removeCallbacks(disconnectCallback);
}
@Override
public void onUserInteraction() {
Log.d("SessionTimeOutActivity", "onUserInteraction");
resetDisconnectTimer();
}
@Override
public void onResume() {
super.onResume();
// resetDisconnectTimer();
}
@Override
public void onStop() {
super.onStop();
// stopDisconnectTimer();
}
}
应用中的其他活动
public class MenuActivtyNav extends SessionTimeOutActivity{
.....
}
菜单活动
public class MenuActivty extends SessionTimeOutActivity{
....
}
问题是
1) 在锁屏状态下,自动注销功能不起作用,它没有调用断开回调函数。
2) 在使用应用程序时,会显示提示信息 "会话超时"。