问题描述
- 安卓登录一段时间为操作自动退出,怎么实现啊。
-
大家好,我现在在学习安卓,现在要实现一个功能——用户登录编写的程序后一段时间未操作会自动退出。自己没有思路,希望大家提示一下。
解决方案
1、为所有的Activity定义一个基类BaseActivity,程序中的所有Activity都继承自这个基类。
2、重写BaseActivity的dispatchTouchEvent()方法,只要监听到此方法,表明用户操作,纪录这个时间。
3、写一个定时器Timer,每1秒检查一次当前系统时间上次操作的时间,如果时间差大于5s,则自动退出(1s、5s自己设定)。
4、示例代码如下:
4.1 MainActivity.java
public class MainActivity extends BaseActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 登录成功,开始计时
startTimer();
}
}
4.2 BaseActivity.java
public class BaseActivity extends Activity {
// 都是static声明的变量,避免被实例化多次;因为整个app只需要一个计时任务就可以了。
private static Timer mTimer; // 计时器,每1秒执行一次任务
private static MyTimerTask mTimerTask; // 计时任务,判断是否未操作时间到达5s
private static long mLastActionTime; // 上一次操作时间
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
// 每当用户接触了屏幕,都会执行此方法
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
mLastActionTime = System.currentTimeMillis();
Log.e("wanghang", "user action");
return super.dispatchTouchEvent(ev);
}
private static class MyTimerTask extends TimerTask {
@Override
public void run() {
Log.e("wanghang", "check time");
// 5s未操作
if (System.currentTimeMillis() - mLastActionTime > 5000) {
// 退出登录
exit();
// 停止计时任务
stopTimer();
}
}
}
// 退出登录
protected static void exit() {
}
// 登录成功,开始计时
protected static void startTimer() {
mTimer = new Timer();
mTimerTask = new MyTimerTask();
// 初始化上次操作时间为登录成功的时间
mLastActionTime = System.currentTimeMillis();
// 每过1s检查一次
mTimer.schedule(mTimerTask, 0, 1000);
Log.e("wanghang", "start timer");
}
// 停止计时任务
protected static void stopTimer() {
mTimer.cancel();
Log.e("wanghang", "cancel timer");
}
}
解决方案二:
设个登录超时的时间,保存到本地,多activity的话可以每跳一个页面,刷新一下超时时间,单activity的话在onPause()里记录时间就行,下次进来先判断
解决方案三:
弄一个固定值赋值每次登录给一个全局静态变量(满值),另外开个线程一直递减
当有“操作”时,重新赋满值,当值为0时退出
解决方案四:
写一个定时器啊,隔一段时间把账号退出
解决方案五:
我是这么想的,登录程序后点击一个按钮,拖动拉框,点击空白处都算是操作了的。那怎么来判断用户是否操作啊?
解决方案六:
写一个定时器,每隔一秒判定一下上次操作的时间
时间: 2024-10-29 18:29:17