2012-10-19 32 views
0

在一項要求中,我創建了一個應該在每5分鐘後更新一次的Widget。我在互聯網上發現,而不是使用Java線程,我應該使用AlarmManager,將節省電池。現在我正在使用AlarmManager進行操作。帶有服務的Android Widget(開始使用Alram)頻繁調用

我面臨的問題是Service類的onStart方法非常頻繁地被調用。幾乎每秒10次。聽到是我的兩個班。

public class MyAppWidget extends AppWidgetProvider { 

    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
     intent = new Intent(context, UpdateWidgetService.class); 
     context.startService(intent); 
    } 
} 

Service類是

public class UpdateWidgetService extends Service { 

private Intent intent; 

@Override 
public void onStart(Intent intent, int startId) { 
this.intent = intent; 
System.out.println("This is getting printed 10 times in a second."); 
final PendingIntent pending = PendingIntent.getService(getApplication(), 0, intent, 0); 
AlarmManager alarm = (AlarmManager) getApplication().getSystemService(Context.ALARM_SERVICE); 
alarm.cancel(pending); 
long interval = 3000; 
alarm.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(),interval, pending);  

stopSelf(); 
super.onStart(intent, startId); 
} 
} 

我也設置在xml文件屬性自動刷新,但它是沒有用的。該應用沒有使用下面的屬性來刷新小部件。此外,我想知道如果該屬性被應用程序使用,將調用哪個方法。

android:updatePeriodMillis="1000" 

回答

0

我建議你移動

super.onStart(intent, startId); 

你方法的開始。用stopSelf()停止服務後調用它是不正確的。