大家好,我現在在學習安卓,現在要實現一個功能——用戶登錄編寫的程序後一段時間未操作會自動退出。自己沒有思路,希望大家提示一下。
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");
}
}