开发者社区 问答 正文

安卓登录一段时间为操作自动退出,怎么实现啊。

大家好,我现在在学习安卓,现在要实现一个功能——用户登录编写的程序后一段时间未操作会自动退出。自己没有思路,希望大家提示一下。

展开
收起
爵霸 2016-05-27 08:24:18 3047 分享 版权
1 条回答
写回答
取消 提交回答
  • 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");
        }
    }
    2019-07-17 19:16:53
    赞同 展开评论
问答分类:
问答标签:
问答地址: