간단하게는 Timer를 쓰셔도 되구요, 당연히 서비스도 될거구요. 저는 WorkManager를 추천합니다. 스케쥴링에 최적화된 클래스이기 때문에.
https://developer.android.com/topic/libraries/architecture/workmanager.
매 20분마다 스케쥴링을 해서 유저의 인터액션이 없었는지 체크하시면 될 것 같습니다.
static final USER_SESSION_TIME = 20 * 60 * 1000L;
long lastUserInteractionTime = 0L
boolean sessionExpired = (System.currentTimeMillis() - lastUserInteractionTime) >= USER_SESSION_TIME
if (sessionExpired) {
logout();
return;
}
lastUserInteractionTime = System.currentTimeMillis();
private void logout() {
Intent intent = new Intent(context, LoginActivity.class);
intent.setFlag(FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
유저 액션을 트랙킹하는 가장 전통적인 방법은 액티비티의 onUserInteraction() 을 오버라이드 하는 겁니다. 보틍은 abstract class BaseActivity 이런 식으로 하고 여기에 onUserInteraction()을 오버라이드 해서 필요한 로직을 넣고 다른 액티비티들은 BaseActivity를 상속해서 처리하도록 만드는게 많이들 해왔던 방식인데, 더 나은 방법은 있는지는 고민을 해봐야 겠네요.
이 방법을 쓰시던 안쓰시던, 별도로 세션을 핸들링하는 클래스를 만드신 다음, 거기에서 유저 세션관련 처리를 하시고 액티비티에서는 단지 그 클래스의 인스턴스를 이용해 세션관리 클래스로부터 세션상태만 참고하는 식으로 코딩을 하시길 권장드립니다.