Как мне обновить sh приложение, если оно было приостановлено слишком долго - PullRequest
0 голосов
/ 17 июня 2020

Я разрабатываю приложение android, которое использует API. Приложение вызывает api и сохраняет информацию. Но когда приложение приостанавливается и возобновляется после длительного периода, информация может больше не быть действительной в это время. Как я могу проверить период времени, в течение которого приложение было приостановлено, чтобы обновить sh информацию. Что-то вроде «refre sh, если приложение приостановлено на час, а затем возобновлено».

1 Ответ

2 голосов
/ 17 июня 2020

Хотя, вы должны использовать onResume(), чтобы изменить все, что вы хотите проверить, когда приложение возобновляет работу после приостановки на любое время.

Теперь, если вы действительно хотите проверить, сколько времени это было на самом деле приостановлено, я бы предпочел простой logi c, например:

  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().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...