大家好,我现在在学习安卓,现在要实现一个功能——用户登录编写的程序后一段时间未操作会自动退出。自己没有思路,希望大家提示一下。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
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");
}
}