2013-07-11 90 views
1

我知道這是一個可能的重複,但我還沒有找到具體的答案呢? (有關於如何迫使小部件每秒更新一次,但部分答案它不是我的全部之後...)電池效率的Android小部件,每分鐘更新一次

  1. 我需要有一個小工具,將更新一分鐘一次。

  2. 如何製造電池& CPU &用於此目的的RAM高效部件? (數據將從互聯網獲取並在向用戶展示之前進行解析(需要完成少量數據和處理))

  3. 我應該在BOOT上運行一個服務,如果用戶有屏幕上的小部件,並有該服務安排一個警報管理器,喚醒更新小部件的服務?

而且我想如果屏幕被鎖定或關閉以節省電池暫停這項服務......

回答

1

這就是我到底有沒有類似的東西。我創建了一個服務(如果您不需要任何複雜的話,可以使用IntentService),然後將其註冊到警報管理器。

long interval = intervalMinutes * 60 * 1000; 
long firstTime = Calendar.getInstance().getTimeInMillis(); 

Intent i = new Intent(ctx, AlarmService.class); 
// Use the widget ID to update only one widget at a time. 
i.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, id); 
PendingIntent mAlarmSender = PendingIntent.getService(ctx, id, i, PendingIntent.FLAG_UPDATE_CURRENT); 

AlarmManager am = (AlarmManager) ctx.getSystemService(ALARM_SERVICE); 
am.setRepeating(AlarmManager.RTC_WAKEUP, firstTime, interval, mAlarmSender); 

正在爲您的Service或IntentService的AlarmService.class。

對於引導事件,您可以創建BroadcastReceiver並管理android.intent.action.BOOT_COMPLETED操作,您可以在其中註冊警報。

您可以在AndroidManifest針對該事件進行註冊:

<receiver android:name=".BroadcastReceiverWidget" > 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 
+1

感謝我實現了這一點,我只想補充一點,添加BOOT_COMPLETED是沒有必要的,因爲的AppWidgetProvider的onEnabled方法被調用的啓動,所以這是一個做一些開始初始化的好地方,它將用於所有小部件。 – JanBo

相關問題