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

Posted

技术标签:

【中文标题】电池高效的 android 小部件,每分钟更新一次【英文标题】:Battery efficient android widget that updates once a minute 【发布时间】:2013-07-09 17:46:17 【问题描述】:

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

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

    如何为此目的制作电池、CPU 和 RAM 高效的小部件? (数据将从互联网上获取并解析,然后再展示给用户(少量数据和处理。))

    如果用户在屏幕上有小部件并让该服务安排一个警报管理器来唤醒更新小部件的服务,我是否应该创建一个在 BOOT 上运行的服务? p>

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

【问题讨论】:

【参考方案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 你的 Service 或 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>

【讨论】:

谢谢我实现了这一点,我只想补充一点,添加 BOOT_COMPLETED 是不必要的,因为 appWidgetProvider 的 onEnabled 方法在启动时被调用,所以这是一个做一些开始初始化的好地方,将用于所有小部件。

以上是关于电池高效的 android 小部件,每分钟更新一次的主要内容,如果未能解决你的问题,请参考以下文章

如何让我的 SwiftUI 小部件每分钟更新一次?

带有 AlarmManager 和配置的 Android 小部件

每 n 秒检索一次 Android 电池指标 [高效]

如何正确更新 AppWidget?

每 5 分钟或定期刷新 Flutter Text 小部件内容

用于跟踪用户位置的高效后台服务