程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> android-安卓登錄一段時間為操作自動退出,怎麼實現啊。

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");
    }
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved