2013-08-16 2 views
1

30 분 후에 자동으로 내 애플리케이션에 로그인하고 싶습니다. 옵션이 많아 혼란 스럽습니다. 1.handlers 하지만 내가 처리기를 사용하면 표시 잠자기 시간을 계산하지 않으며 다른 활동의 처리기를 다시 시작할 수 없다고 생각합니다. 2.AlarmManager 나는 그것에 대해 많이 알지는 않지만 더 많은 CPU 메모리를 사용한다고 생각한다. 내가안드로이드에서 30 분 후 앱 자동 로그인을 위해 무엇을 사용합니까?

new CountDownTimer(40000, 1000) { //40000 milli seconds is total time, 1000 milli seconds is time interval 

public void onTick(long millisUntilFinished) { 
    } 
    public void onFinish() { 
} 
}.start(); 

이하로 사용하지만, 내가 그것을 다른 스레드

을 만들거나 내가 서비스를 사용해야하는 nessesary입니다 것입니다 자바 다른 활동 4.timer에 CountDownManager 프로세스를 재개 할 수있는 방법 같은 3.CountDownManager 위의 방법 중 하나를 포함합니다. 사용자가 홈 버튼을 눌러 앱이 onPause() 상태로 이동할 가능성이 있기 때문에 디스플레이가 잠자기 시간이 지나면 잠자기 상태가 될 수 있습니다. 또한 내 앱이 서비스를 사용하여 속도를 줄이려하지 않습니다. 내 app.can 누구든지 나를 도울 것입니다.

+1

'AlarmManager 나는 그것에 대해 많이 알지는 못한다.하지만 더 많은 CPU 메모리를 사용한다고 생각한다. 왜? 나는 sooo라고 생각하지 않는다. 이 더 나은 옵션이 될 것입니다 .. –

+0

TimerTask 귀하의 경우에는 좋은 옵션입니다. – AndroUser

+0

내가 AlarmManager를 사용하는 경우 내 활동이 일시 중지되거나 내 앱에서 집 버튼을 누른 경우 발생하는 상황 30 분 후 알람 관리자가 알람을 울림 – Ruban

답변

4

시간 제한을 사용할 수 있습니다. 여기에 간단한 예가 나와 있습니다.

public static final int TIMEOUT_FOR_APPLICATION = 1800000;//exit app after 30 minutes 



    private void timeout() { 

    new Handler().postDelayed(new Runnable() { 

     @Override 
     public void run() { 

     finish();//or whatever you want to do 


     } 
    }, TIMEOUT_FOR_APPLICATION); 

} 

희망이 당신이 삼십분 후에 대한 ...

건배

+0

사용자가 이동하면 어떻게됩니까? 또 다른 activity.should 새로운 핸들러를 생성해야합니다 – Ruban

+0

또는 화면이 표시되면 어떻게됩니까 – Ruban

+0

30 분의 사용자 로그인 후에 앱을 로그 아웃하지 않으려 고합니다. 사용자가 화면을 터치하지 않고 유휴 상태로 30 분 이상 머문 경우에만 로그 아웃하려고합니다. – Ruban

2

사용 AlaramManager 및 알람 설정 찾고있는 것입니다. 30 분 후에 서비스가 호출되도록 보류중인 의도를 사용해야합니다. 거기서 코드를 할 수 있습니다.

당신은 How to set alarm programetically?

을 볼 수 있습니다 당신은 당신이 알람을 재설정 할 수있는 것보다 터치 또는 포커스를받을 경우보다 유휴 시간을하고 싶어합니다.

그리고 화면 꺼짐의 경우 onPause 및 onResume에서 코드를 작성할 수 있습니다.

+0

처음에는 핸들러를 사용했지만 .my 앱은 힘을 얻지 못했습니다. 빈번하게 호출되었습니다. 나는 모든 이벤트에 대해 핸들러를 제거해야합니다. 핸들러 타이머를 재설정 할 수 없기 때문입니다. 마지막으로 타이머를 사용하여 문제를 해결했습니다. – Ruban

+0

tks sanket.i에는 의심의 여지가 하나 더 있습니다.모든 클릭 이벤트 (editText 클릭, 부모 선형 레이아웃 클릭, 모든 버튼 클릭)에 대해 alaram 관리자를 취소하는 것은 매우 불쾌합니다. 사용자가 화면을 터치 할 때 감지 할 수있는 방법은 없습니다. 터치 이벤트, 제스처 등을 사용하여 시도했지만, 단추 및 editText를 클릭하면 지원되지 않습니다. – Ruban

+0

죄송합니다. 시도하지 않았습니다. 답변이 있으면 알려 드리겠습니다. –

2

클래스 User에서 lastLogin 필드를 추가하십시오.

private static final Long EXPIRE_TIME = 1000L * 60 * 30; //30M 
private static final Long DELAY_TIME = 1000L * 60 * 5; 
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1); 
scheduledExecutorService.scheduleWithFixedDelay(new ContainerCleaner(), EXPIRE_TIME, DELAY_TIME, TimeUnit.MILLISECONDS); 

public class ContainerCleaner implements Runnable { 
    @Override 
    public void run() { 
     UserCache.cleanupContainer(); 
    } 
} 

UserCache

public synchronized void cleanupContainer() { 
    Collection<User> users= userCache.values(); 
    for (Userp : users) { 
     if (isExpired(p)) { 
      expire(p); 
     } 
    } 
} 
private boolean isExpired(SessionProfile sessionProfile) { 
    if (sessionProfile == null) { 
     return false; 
    } 
    Long lastAccess = sessionProfile.getValue(Name.LASTACCESS); 
    return System.currentTimeMillis() - lastAccess > EXPIRE_TIME; 
} 

의 코드는 내 웹 서비스에서입니다. 사용자가 5 분마다 만료되는지 여부를 감지합니다.

+0

30 분 동안 로그인 한 후 앱을 로그 아웃하지 않으려 고합니다. 화면을 터치하지 않고 유휴 상태로 30 분 이상 머문 경우에만 로그 아웃하고 싶습니다. – Ruban

관련 문제