一般app應(yīng)該都會(huì)有這個(gè)需求茁裙,多久對(duì)頁(yè)面沒有操作就會(huì)退出登錄球及,這里的實(shí)現(xiàn)方法用定時(shí)器袜刷。
1更耻、思路
1)寫一個(gè)基礎(chǔ)的BaseActivity缓呛;
2)讓其他所有頁(yè)面的Activity都繼承這個(gè)BaseActivity扮授;
3)在BaseActivity里監(jiān)聽有無頁(yè)面操作闸天;
4)在OnResume中啟動(dòng)計(jì)時(shí)器犬绒;
5)在dispatchTouchEvent中監(jiān)聽有動(dòng)作是取消計(jì)時(shí)檩禾,抬起動(dòng)作是啟動(dòng)計(jì)時(shí)器挂签;
6)計(jì)時(shí)結(jié)束就調(diào)退出登錄。
2盼产、BaseActivity里關(guān)鍵代碼
private long advertisingTime = 300 * 1000;///定時(shí)結(jié)束退出登錄5分(分鐘)=300000毫秒
public CountDownTimer countDownTimer;
@Override
protected void onResume() {
super.onResume();
//啟動(dòng)定時(shí)
isLogout();
}
/**
* 計(jì)時(shí)
*/
public void isLogout() {
if ("1".equals(login)) {//已登錄狀態(tài)
if (countDownTimer == null) {
countDownTimer = new CountDownTimer(advertisingTime, 300000) {//登錄狀態(tài)是時(shí)頁(yè)面5分鐘沒有操作彈窗提示
@Override
public void onTick(long millisUntilFinished) {
}
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public void onFinish() {
//定時(shí)結(jié)束后的操作
Logout();//退出登錄
if (countDownTimer != null) {
countDownTimer.cancel();
}
}
};
countDownTimer.start();
} else {
countDownTimer.start();
}
}
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
//有按下動(dòng)作時(shí)取消定時(shí)
if (countDownTimer != null){
countDownTimer.cancel();
}
break;
case MotionEvent.ACTION_UP:
//抬起時(shí)啟動(dòng)定時(shí)
isLogout();
break;
}
return super.dispatchTouchEvent(ev);
}
完結(jié)饵婆。