如果暂停时间过长,我该如何刷新我的应用程序

How can I refresh my app if it was paused for too long

我正在开发一个使用 api 的 android 应用程序。该应用调用 api 并存储信息。但是当应用程序暂停并在很长一段时间后恢复时,信息可能不再有效。如何查看应用程序暂停的时间段以刷新信息。 像 "refresh if the app is paused for an hour and is then resumed".

这样的东西

尽管如此,您应该使用 onResume() 来更改您想要检查的任何内容,以便在暂停任何时间后恢复应用程序时进行检查。

现在,如果你真的想检查它实际暂停了多少时间,我更喜欢这样的简单逻辑:

  1. 加载数据时将当前时间保存在SharedPreferences

    Date date = new Date(System.currentTimeMillis()); //or simply new Date();
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
    prefs.edit().putLong("Time", date.getTime()).apply();
    
  2. onResume()中,计算当前时间和保存时间的差为

    @Override
    public void onResume(){
       super.onResume();
       SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
       Date savedDate = new Date(prefs.getLong("Time", 0)); //0 is the default value
       Date currentDate = new Date(System.currentTimeMillis());
       long diff = currentDate.getTime() - savedDate.getTime(); //This difference is in milliseconds.
       long diffInHours = TimeUnit.MILLISECONDS.toHours(diff); //To convert it in hours
       // You can also use toMinutes() for calculating it in minutes
       //Now, simple check if the difference is more than your threshold, perform your function as
       if(diffInHours > 1){
       //do something
       }
    }
    

您也可以使用全局变量而不是 SharedPreferences 来节省数据加载时间,但这可能存在风险,因为它可能会被系统清除。

编辑:此外,如果您只想检查暂停和恢复之间的区别,而不是数据加载和恢复之间的区别,请执行 onPause() 中的第一步。