代码之家  ›  专栏  ›  技术社区  ›  Sanved

每天检查SharedPreferences是个好主意吗

  •  0
  • Sanved  · 技术社区  · 9 年前

    我有一个AlarmManager,它每分钟调用一个BroadcastReceiver。它运行良好,没有任何问题。BroadcastReceiver查找SharedPreferences文件中的现有值。它每分钟检查大约4个值。 我只是想知道这是否会对系统造成影响。它最终会让设备变慢吗?

    PS-我不能再降低数值了。这将与我目前的设计相冲突。 提前谢谢你。

    PPS-关于SharedPreference的时间和速度的简要理论将非常感谢。

    1 回复  |  直到 9 年前
        1
  •  1
  •   Strider    9 年前

    我不知道 AlarmManager 快速耗尽电池电量,但我建议您删除代码中的AlarmManager部分,并使用 Handler 相反

    AlarmManager :

    注: 报警管理器适用于希望在特定时间运行应用程序代码的情况,即使应用程序当前未运行。对于正常计时操作(滴答声、超时等),它更容易使用,效率更高 处理程序 .

    所需的精确计时:

    setRepeating 对于<第19页

    setExact API 19<

    注: 只有对精确时间传递有强烈需求的警报(例如在请求的时间响起的闹钟)才应被安排为精确的。强烈建议应用程序不必要地使用精确报警,因为 减少 操作系统最小化的能力 电池 使用

    这两个都很耗电。

    所以你必须选择:

    setInexactRepeating 对于<API 19

    注: 安排触发时间要求不准确的重复报警;例如,警报每小时重复一次,但不一定在每小时的顶部。这些警报更多 功率有效的 与传统上由setRepeating(int、long、long和PendingIntent)提供的严格重复次数相比,由于系统可以调整报警的传递时间以使其同时触发, 避免将设备从睡眠中唤醒。

    但对于每分钟都要执行的警报来说,这不是很精确。

    所以,你可能最适合 处理程序 :

    final Handler handler = new Handler()
    handler.postDelayed( new Runnable() {
    
        @Override
        public void run() {
            //Do your things
        handler.postDelayed( this, 60 * 1000 );
        }
    }, 60 * 1000 );
    

    希望这能回答你的问题。如果有任何不正确或需要改进的地方,请随时编辑/添加,或在下面留言。