由于在android中处于非活动状态,15分钟后自动从应用程序注销
我想在android应用程序中进行会话管理。如果用户处于非活动状态或未与应用程序交互,我想从应用程序中注销用户。我不知道什么时候开始服务。目前我正在onResume()中启动它。我用倒计时在15分钟后自动注销。但这是行不通的。是否有任何有效或有效的会话管理解决方案由于在android中处于非活动状态,15分钟后自动从应用程序注销,android,Android,我想在android应用程序中进行会话管理。如果用户处于非活动状态或未与应用程序交互,我想从应用程序中注销用户。我不知道什么时候开始服务。目前我正在onResume()中启动它。我用倒计时在15分钟后自动注销。但这是行不通的。是否有任何有效或有效的会话管理解决方案 注销服务: public class LogoutService extends Service { public static CountDownTimer timer; @Override public v
注销服务
:
public class LogoutService extends Service {
public static CountDownTimer timer;
@Override
public void onCreate(){
// TODO Auto-generated method stub
super.onCreate();
timer = new CountDownTimer(5 * 60 * 1000, 1000) {
public void onTick(long millisUntilFinished) {
//Some code
Log.v("LogoutService", "Service Started");
}
public void onFinish() {
Log.v("LogoutService", "Call Logout by Service");
// Code for Logout
stopSelf();
}
};
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
}
main活动
:
@Override
protected void onStop() {
super.onStop();
LogoutService.timer.cancel();
}
@Override
protected void onResume() {
super.onResume();
startService(new Intent(this, LogoutService.class));
LogoutService.timer.start();
}
首先,我能猜出为什么它不工作的一个原因是可能是因为这个代码
@Override
protected void onStop() {
super.onStop();
LogoutService.timer.cancel();
}
让我们假设,如果设备屏幕消失,onStop()将被触发,因此您的计时器将被取消,无需进一步检查
像这样取消onDestroy上的时间
@Override
protected void onDestroy() {
super.onDestroy();
LogoutService.timer.cancel();
}
既然你问有没有更好的方法,那就是你可以使用触摸事件
在线程或计时器中启动计数器,如果计数器达到15分钟,则通过调用
finish()
下面是检测整个活动onCreate()的onTouch事件的代码
这对我很有用:
private Handler handler;
private Runnable r;
@Override
protected void onCreate(Bundle savedInstanceState) {
// Your code
handler = new Handler();
r = new Runnable() {
Toast.makeText(MainActivity.this, "user is inactive from last 5 minutes",
Toast.LENGTH_SHORT).show();
// Preform you action here
};
startHandler();
}
@Override
protected void onDestroy() {
super.onDestroy();
stopHandler();
}
@Override
public void onUserInteraction() {
super.onUserInteraction();
stopHandler();
startHandler();
}
public void stopHandler() {
handler.removeCallbacks(r);
}
public void startHandler() {
handler.postDelayed(r, 10000);
}
可能重复:为什么不尝试搜索?“这就是你想要的,”萨默什库马尔说,“我试过那个解决办法。但是15分钟没有锻炼。如果屏幕处于活动状态,它将工作。如果屏幕关闭,则不会进行训练。如果应用程序在background@kuffs中运行,则会立即注销。问题可能表明了这一点,但答案涵盖了各种选项。你读了吗?我的回答特别涉及您的用例。您能提供完整的实现吗?一个星期以来我一直被这个问题所困扰。@hiren你有没有试着先移动你的计时器。取消到onDestroy()?是的。我现在已经试过了,效果很好。但不管怎样,我都会在5分钟后退出。我想我需要将它与
onTouchListener()
集成。怎么做?因为您的计时器设置为5分钟:-)5*60*1000将其更改为15*60*1000 Yalla done..如果用户在第14分钟开始使用我的应用程序会怎么样?它仍然会将我注销。我怎样才能阻止它?因为在用户再次开始使用应用程序后,倒计时不会停止。
private Handler handler;
private Runnable r;
@Override
protected void onCreate(Bundle savedInstanceState) {
// Your code
handler = new Handler();
r = new Runnable() {
Toast.makeText(MainActivity.this, "user is inactive from last 5 minutes",
Toast.LENGTH_SHORT).show();
// Preform you action here
};
startHandler();
}
@Override
protected void onDestroy() {
super.onDestroy();
stopHandler();
}
@Override
public void onUserInteraction() {
super.onUserInteraction();
stopHandler();
startHandler();
}
public void stopHandler() {
handler.removeCallbacks(r);
}
public void startHandler() {
handler.postDelayed(r, 10000);
}