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

问题描述

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

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

解决方案

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

android-安卓登录一段时间为操作自动退出,怎么实现啊。的相关文章

定时任务执行一段时间JVM会自动退出问题,急求大神帮忙。

问题描述 最近程序很不稳定,运行一段时间后,JVM会自动退出,急求ITeye大神帮忙看下.下面是错误日志:## A fatal error has been detected by the Java Runtime Environment:## Internal Error (safepoint.cpp:308), pid=16953, tid=139961315587840# guarantee(PageArmed == 0) failed: invariant## JRE version:

vc++编程问题-判断一段时间无人操作如何实现

问题描述 判断一段时间无人操作如何实现 VC++如何判断电脑一段时间无操作,类似QQ的离开状态判断,用VC++怎么实现? 解决方案 参考计算机一段时间不操作进入屏保模式的程序.

android模拟器运行一段时间出现问题

问题描述 android模拟器运行一段时间出现问题 D/dalvikvm( 7544): JIT code cache reset in 98 ms (1535968 bytes 1/0) D/dalvikvm( 7544): GC_CONCURRENT freed 1946K, 10% free 20248K/22288K, paused 23ms+123ms, total 308ms F/libc ( 7544): Fatal signal 4 (SIGILL) at 0xaa4a01f8

websocket-Websocket过一小段时间就会自动断开连接

问题描述 Websocket过一小段时间就会自动断开连接 如题... 连接上了之后,过几分钟就会自动断开.. 在多个浏览器测试过...结果都是这样... 解决方案 websocket需要进行心跳包维持连接,浏览器不会帮你维持,所以隔断时间就断开了,你自己实现的客户端就需要维持这个连接 解决方案二: 有心跳检测机制么?保持心跳,不要一直空闲. 解决方案三: websocket怎么用

PHP利用Cookie设置用户30分钟未操作自动退出功能

登陆控制器需要做的登陆成功把用户ID等信息存入cookie: $this->systemSetKey(array('name'=>$admin_info['admin_name'], 'id'=>$admin_info['admin_id'],'gid'=>$admin_info['admin_gid'],'sp'=>$admin_info['admin_is_super']));//登陆成功之后做得事情 父类中的 systemSetKey 方法: /** * 系统后台 会员

登录后 长时间不操作 超时注销

系统有自带设置可以实现session超时 Java代码   session.gc_maxlifetime = 1440 #(PHP5默认24分钟)   这里你可以随便设置一下过期时间.但是有人说设置以后,好象不起作用!其实不是不起作用,而是因为系统session回收机制是按机率启动的,可能在某一个长时间内都没有被启动.   以下是我的思路: 首先设置一个登录正确的开始时:$_SESSION['LOGIN_TIME'] = time(); 然后判断现在的时间: $times = time(); 最

无论是ios 还是安卓,在长时间不操作之后会收不到消息,必须要点chatview 才能收到消息

问题描述 解决方案 建议您这边直接下载下环信的demo,然后换上appkey来测试下了,看看有没有这个具体的问题了,嗯.

使程序在用户长时间不操作时退出

原文:http://www.icodeblog.com/2011/09/19/timing-out-an-application-due-to-inactivity/ 概述 先讲讲原理.我创建了一个 UIApplication 的子类ELCUIApplication.目的是为了覆盖 sendEvent: 方法.这个方法在每次触摸时都会调用.触摸可能来自于按钮.文本框以至窗口内的任何东西. 在 sendEvent 方法中,首先调用 super 的方法(确保事件能被传递到它应该到达的地方),然后重置

为什么 ADSL 闲置一段时间就会自动断线

具体步骤如下: 打开"开始-〉控制面板" 收起这个图片展开这个图片   点击"网络和 Internet" 收起这个图片展开这个图片   再按一下"网络和共享中心" 收起这个图片展开这个图片   单击页面左上角的"更改适配器设置" 收起这个图片展开这个图片   接着,在 ADSL 宽带连接图标上,右键鼠标,选择"属性" 收起这个图片展开这个图片   切换至"选项"页,在"挂断前的