2016-08-20 2 views
0

У меня есть приложение, которое имеет три действия, пользователь будет постоянно табулировать между этими тремя действиями. Прямо перед тем, как пользователь закрывает приложение, мой код загружает текущее время из Интернета и сохраняет его. Проблема в том, что у меня есть мой код для загрузки времени в методе onPause(). Это приводит к тому, что данные будут загружаться снова и снова каждый раз, когда пользователь переключает действия. Я попытался использовать onDestroy(), но загрузка никогда не началась. существует ли метод, который вызывается, когда пользователь сводит к минимуму или закрывает приложение вообще, а не тот, который вызывается на коммутаторе активности? Большое спасибо, любая помощь приветствуется!Метод кроме того onPause?

+1

Попробуйте с OnStop –

+1

OnStop не гарантируется называться –

+0

OnStop доцент работы, так как он вызывается, когда активность переключается –

ответ

0

Мы можем достичь этого, используя класс Application. Там мы можем реализовать ActivityLifecycleCallbacks, чтобы определить, когда наше приложение перейдет на задний план и на основе этого результата мы выполним требуемую задачу. Вот, пример кода:

public class MyApplication extends Application implements ActivityLifecycleCallbacks { 

    private Handler mHandler; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     mHandler = new Handler(); 
    } 

    ... 

    @Override 
    public void onActivityResumed(Activity activity) { 
     Log.i("Activity Resumed", activity.getLocalClassName()); 

     // cancel scheduled download operation (if any) 
     mHandler.cancelCallbacksAndMessages(null); 
    } 

    @Override 
    public void onActivityPaused(Activity activity) { 
     Log.i("Activity Paused", activity.getLocalClassName()); 

     // schedule a download operation after 5 seconds 
     mHandler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
        performDownloadOperation() 
      } 
     }, 5000); 
    } 

    ... // other lifecycle callbacks 

    private void performDownloadOperation() { 
     // perform download operation here 
    } 

} 

В приведенном выше коде, мы в основном давая пользователю [и систему] время отсрочки 5 секунд, чтобы переключиться с одного вида деятельности на другой. В противном случае мы заметим, что приложение перешло на задний план и там делали все. Таким образом, даже если пользователь переключится на другое приложение на 4 секунды, а затем вернется, мы все равно не загрузим данные, что в большинстве случаев должно быть прекрасным.

Обратите внимание, что для использования вышеуказанного класса вам необходимо указать ссылку на класс android:name как android:name=".MyApplication" под тегом <application> в файле манифеста.

+0

я не знаю, как непосредственно ответить, но что происходит, если уменьшающая пользователя и закрывает приложение в течение 5 секунд ? будет ли задача просто не работать? –

+0

Что значит закрывать? Сила остановить? – Shaishav

+0

, когда пользователь нажимает квадрат, чтобы открыть последнее приложение (Свернуть приложение), а затем отскакивает приложение, чтобы закрыть его. –

0

Вы можете использовать Activity::isFinishing(). Это вернет false, когда вы (1) запустите другое действие или когда (2) приложение будет помещено на фон, но оно вернет true, если (3) нажата кнопка возврата или если (4) кто-то вызывает finish о действии.

Если важно различать (1) и (2), вы всегда можете сохранить флаг, который вы можете переключать при каждом запуске операции, и сбросить его в .