2016-07-19 1 views
0

서비스 내에서 hanfler를 사용하여 Android에서 지연된 후 메소드를 호출합니다. 긴 지연 시간 동안 작동하지 않지만 동일한 코드가 작은 지연 시간 동안 작동합니다.지연이 1 시간 후에 작동하지 않습니다.

Handler mHandler; 
Runnable runnable; 

mHandler = new Handler(); 
runnable=new Runnable() { 
    @Override 
    public void run() { 
     Log.i("START SERVICE", "START SERVICE:3 Call to Check Status is called"); 
     callToCheckStatus(); 
     mHandler.postDelayed(this, 1000*60*60); 
    } 
}; 
mHandler.postDelayed(runnable, 1000*60*60); 

일부 블로그에서는 기기가 깊은 잠에 들어갔을 때 작동하지 않는 것으로 나타났습니다. 그래서 안드로이드에서 메서드를 호출하는 올바른 방법은 뭐죠?

+1

이 AlarmManager' '를 살펴 보자보십시오 : https://developer.android.com/reference/android/app/AlarmManager.html – 0xDEADC0DE

+0

@ 0xDEADC0DE .. 고마워. 근데 유용하지 않아. 이 글은 읽었지만 이미 부트 리시버를 사용하고 있으며 어떤 활동으로도 스케줄을 잡을 수 없습니다. 60 분 후에 서비스를 시작한 다음 방법을 호출해야합니다. – Alpesh

답변

0

public static void intertiAdsStartTimer(Context cnxt) { 
    timer = new Timer(); 
    initializeTimerTask(cnxt); 
    //timer.schedule(timerTask, delayTime, repeatedTime); 
    timer.schedule(timerTask, 0, Integer.parseInt("7") * 60 * 1000); // 
} 

public static void initializeTimerTask(final Context cnxt) { 
    try { 
     final Handler handler = new Handler(Looper.getMainLooper()); 
     timerTask = new TimerTask() { 
      public void run() { 
       handler.post(new Runnable() { 
        public void run() { 
         try { 
          //call your method 
         } catch (Exception e) { 
          e.printStackTrace(); 
         } 
        } 
       }); 
      } 
     }; 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

또는

final Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     // Do something after 10s = 10000ms 

    } 
}, 10000); 
+0

내 것과 같지 않습니까? 실제로 장치가 깊은 잠 상태에 들어갈 때 runnable은 사라집니다. 그게 문제 야. – Alpesh

관련 문제