1

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

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

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

  3. 如果用户在屏幕上有小部件并让该服务安排一个警报管理器来唤醒更新小部件的服务,我应该制作一个在 BOOT 上运行的服务吗?

如果屏幕被锁定或关闭,我也想暂停这项服务以节省电池...

4

1 回答 1

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>
于 2013-08-28T07:40:54.700 回答