电池效率高的Android小部件,每分钟更新一次

时间:2013-07-11 12:39:13

标签: android android-widget android-service android-alarms

我知道这可能是重复的,但我还没有找到具体的答案吗? (关于如何强制小部件每秒更新,但部分答案不是我所追求的......)

  1. 我需要一个每分钟更新一次的小部件。

  2. 如何为此目的制作电池和CPU& RAM高效小部件? (数据将从互联网上获取并在显示给用户之前进行解析(少量数据和处理要完成。)

  3. 如果用户在屏幕上显示小部件并且该服务安排了唤醒更新小部件的服务的警报管理器,我是否应该在BOOT上运行服务?

  4. 此外,如果屏幕被锁定或关闭,我想暂停此服务以节省电池......

1 个答案:

答案 0 :(得分: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);

使用AlarmService.class你的服务或IntentService。

对于启动活动,您可以创建BroadcastReceiver并管理android.intent.action.BOOT_COMPLETED操作,以便注册闹钟。

您可以在AndroidManifest注册该活动:

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