Как показать некоторый контент, когда приложение Android в onStop

#android #android-activity #android-progressbar #activity-lifecycle

#Android #android-активность #android-панель прогресса #активность-жизненный цикл

Вопрос:

У меня простой вопрос: есть ли способ показать что-то, например, индикатор выполнения, когда приложение находится в режиме onStop? Поскольку мое приложение выполняет много вычислений, и когда оно действительно выполняет это, оно останавливается, и отображается черный экран, и, наконец, когда вычисление выполнено, оно возвращается к обычному экрану. Итак, все правильно с функциональной точки зрения, но эстетически это не так хорошо. У вас есть какой-нибудь совет?

Комментарии:

1. Если действие переходит в onStop , то оно больше не отображается пользователю. Вы неправильно поняли концепцию жизненного цикла активности. внимательно прочитайте активность .. Для вычислительной части, которая занимает больше времени, вы должны использовать фоновый поток. Не выполняйте никаких длительных задач в главном потоке, это приведет к ANR .

2. Извините, я был немного двусмысленным. Я знаю, что onStop подразумевает для приложения. Но, поскольку я хочу, чтобы что-то показывалось на этом этапе жизненного цикла, я хотел знать, есть ли способ «обмануть» проблему.

Ответ №1:

Итак, вы в основном хотите, чтобы ваше устройство не переходило в спящий режим во время выполнения вычислений? Это называется WakeLock , и это в основном предотвращает отключение экрана вашей активности. Будьте осторожны и используйте его экономно, чтобы избежать разрядки аккумулятора вашего пользователя.

Это очень легко сделать программно:

 class MainActivity : Activity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
    }
}
  

Или вы можете добавить атрибут xml к представлению, которое хотите отобразить:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:keepScreenOn="true">
    ...
</RelativeLayout>
  

Для получения дополнительной информации и подробностей ознакомьтесь с документацией

Комментарии:

1. Спасибо за ответ. Но приложение не переходит в спящий режим, пока вычисления занимают много времени. Подводя итог: я запускаю приложение, затем мне нужно выбрать несколько изображений, когда я их выбираю, начинаются вычисления, и если я выберу много изображений, это займет больше времени, поэтому действие переходит в режим onStop, и черный экран отображается до конца вычисления, и возвращается обычный макет.

2. Это больше похоже на проблему с потоками. Если устройство «зависает» в течение этого времени, например, вы не можете ничего делать в течение определенного периода времени, вы блокируете основной поток.

3. Да, я думаю, что это связано с тяжелыми вычислениями, которые выполняются. Так что нечего делать?

4. Здесь слишком много вариантов для перечисления. Возможно, сопрограммы — это самый простой способ начать. Посмотрите здесь kotlinlang.org/docs/tutorials/coroutines /…