2011-04-19 12 views
10

안녕하세요 나는 안드로이드 위젯을 쓰고 있습니다. 나는 webservice에서 데이터를 모니터하기 위해 매 1-5 분마다 업데이트하고 싶었지만 android : updatePeriodMillis가 30 분 미만이 될 수 없음을 발견했습니다 .... 어떻게 위젯으로이 결과를 얻을 수 있습니까?1 분마다 안드로이드 위젯 업데이트하기

감사 인사 및 인사말 c.

답변

16

1 분마다 호출 할 때마다 AlarmManager 서비스를 등록하십시오.

final Intent intent = new Intent(context, UpdateService.class); 
final PendingIntent pending = PendingIntent.getService(context, 0, intent, 0); 
final AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
alarm.cancel(pending); 
long interval = 1000*60; 
alarm.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(),interval, pending); 

그러나 업데이트를 앱 위젯에 적용하는 것은 비용이 많이 드는 작업입니다. 1 분마다 업데이트하면 "앱 위젯 업데이트"코드가 항상 실행되는 메모리에 상주하게되며 이는 배터리 소모를 상당히 줄입니다.

+0

이 코드를 어디에 넣어야합니까? 안드로이드 초보자로서, 그것은 나를 도울 수 없습니다 ... – Virthuss

+0

이'onUpdate' 메서드에 넣어해야합니까? – natsumiyu

+1

Android 6.0 이상에서는 제대로 작동하지 않습니다. 도즈 모드는 일반적으로'setRepeating()'과 잘 작동하지 않습니다. 나는 알람을 울릴 때마다'setExactAndAllowWhileIdle()'을 시도해 봤지만 1 분이 지나면 너무 오래 쉬지도 않는다. – Nikiforos

1

Handler ~ sendMessageDelayed(..) 메시지 또는 postDelayed(..)Runner을 사용하십시오.

new Handler().postDelayed(new Runnable() { 
    public void run() { ... }, 
    60000 /* one minute */ 
); 
+1

허용되는 답변 : http://stackoverflow.com/questions/5671984/android-substuting-the-click-with-a-timer/5672264#5672264 처리기와 postDelayed를 사용하는 꽤 좋은 예가 제공됩니다. – Maximus

+0

This 앱 위젯을 업데이트 할 코드가 계속 실행되고 있다고 가정합니다. 이는 잘못된 가정이나 잘못된 생각입니다. – CommonsWare

+1

사용자가 android.appwidget 클래스에서와 같이 데스크톱 위젯을 의미하는 경우 예, 동의합니다. Priyank의 대답이 정확합니다. 그러나 사용자가 android.widget 클래스의 것과 같은 사용자 정의보기를 의미하는 경우에는 원래의 가정 인 Activity에 연결된 View 트리를 의미합니다. 왜 그들은 왜 "위젯"이름을 oveload 했습니까?) – Anm

관련 문제