暂停时间过长,如何刷新应用?

问题描述 投票:0回答:1

我正在开发一个使用api的android应用。该应用调用api并存储信息,但当该应用长时间暂停和恢复时,当时的信息可能不再有效。但是,当应用程序暂停后,在很长一段时间后恢复,信息可能不再是有效的时间。如何检查应用暂停的时间,以便刷新信息,比如 "如果应用暂停一小时后又恢复,则刷新"。

android api android-lifecycle
1个回答
2
投票

虽然,你应该使用 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 以节省数据加载时的时间,但这可能是有风险的,因为它可能会被系统清除。

编辑:另外,如果你只想检查Pause和Resume的区别,而不想检查数据加载和Resume的区别,那就按第一步在 onPause().

© www.soinside.com 2019 - 2024. All rights reserved.