【问题标题】:Efficiently and periodically update variable高效且定期地更新变量
【发布时间】:2019-02-14 04:40:27
【问题描述】:

在 Android 中定期更新变量的最有效方法是什么?

我有整数,其值必须每秒增加(仅当应用程序打开时),它应该可以通过所有活动/片段访问。

现在这是我的代码:

onCreate() in MainActivity:

Timer timer = new Timer();
TimerTask updateValues = new UpdateValues();
timer.scheduleAtFixedRate(updateValues, 0, 1000);

UpdateValues 类:

public static final String MY_PREFS_NAME = "MyPrefsFile"
class UpdateValues extends TimerTask {
    public void run() {
        SharedPreferences sharedPref = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPref.edit();

        int first = sharedPref.getInt("first_key", 0);
        editor.putInt("first_key", first + 1);
        // a lot of stuff in here

        editor.apply();
    }
}

【问题讨论】:

  • 如果可以将共享首选项对象移动到字段中会更高效,但是您认为这有什么问题?

标签: android performance timer sharedpreferences android-handler


【解决方案1】:

记录应用程序打开了多少时间并从中计算出你的整数值不是更容易吗?类似的东西:

public int getValue() {
    return (System.currentMillis() - startTimeMillis) / MILLIS_PER_SECOND;
}

除非我误解了您的问题,否则您实际上不需要改变任何状态来计算自应用程序启动以来的秒数。

【讨论】:

    【解决方案2】:

    启动一个 NOT_STICKY 服务并将计时器代码投入服务。因此,只要您的应用处于前台或后台,该变量就会不断增加自身,并且一旦应用关闭,服务就会停止并且变量不会自行增加。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-28
      • 2021-01-24
      • 2020-05-22
      • 2020-12-12
      • 1970-01-01
      • 2016-02-18
      • 1970-01-01
      相关资源
      最近更新 更多