У меня есть приложение, которое имеет три действия, пользователь будет постоянно табулировать между этими тремя действиями. Прямо перед тем, как пользователь закрывает приложение, мой код загружает текущее время из Интернета и сохраняет его. Проблема в том, что у меня есть мой код для загрузки времени в методе onPause(). Это приводит к тому, что данные будут загружаться снова и снова каждый раз, когда пользователь переключает действия. Я попытался использовать onDestroy(), но загрузка никогда не началась. существует ли метод, который вызывается, когда пользователь сводит к минимуму или закрывает приложение вообще, а не тот, который вызывается на коммутаторе активности? Большое спасибо, любая помощь приветствуется!Метод кроме того onPause?
ответ
Мы можем достичь этого, используя класс 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>
в файле манифеста.
я не знаю, как непосредственно ответить, но что происходит, если уменьшающая пользователя и закрывает приложение в течение 5 секунд ? будет ли задача просто не работать? –
Что значит закрывать? Сила остановить? – Shaishav
, когда пользователь нажимает квадрат, чтобы открыть последнее приложение (Свернуть приложение), а затем отскакивает приложение, чтобы закрыть его. –
Вы можете использовать Activity::isFinishing()
. Это вернет false, когда вы (1) запустите другое действие или когда (2) приложение будет помещено на фон, но оно вернет true, если (3) нажата кнопка возврата или если (4) кто-то вызывает finish
о действии.
Если важно различать (1) и (2), вы всегда можете сохранить флаг, который вы можете переключать при каждом запуске операции, и сбросить его в .
Попробуйте с OnStop –
OnStop не гарантируется называться –
OnStop доцент работы, так как он вызывается, когда активность переключается –