Каждый раз, когда экран spla sh открывается, когда приложение возобновляется с фона, такого как экран отпечатков пальцев WhatsApp - PullRequest
1 голос
/ 13 марта 2020

Я хочу открыть экран с изображением, и когда мое приложение будет возобновлено, я хочу показать этот экран. Но проблема в том, что он показывает белый экран первым, когда приложение возобновляется.

Как убрать этот белый экран и каждый раз открывать как экран WhatsApp?

Вот мой класс приложений

class App : Application() {
    private var context: Context? = null

    override fun onCreate() {
        super.onCreate()
        context = this
        registerActivityLifecycleCallbacks(AppLifecycleTracker())
    }

    companion object {
        @SuppressLint("StaticFieldLeak")
        private val instance: App? = null
        fun getContext(): App? {
            return instance
        }
    }

И AppLifecycleTracker класс

class AppLifecycleTracker : Application.ActivityLifecycleCallbacks {
    override fun onActivityPaused(activity: Activity) {
        println("AppLifecycleTracker onActivityPaused")
    }

    override fun onActivityDestroyed(activity: Activity) {
        println("AppLifecycleTracker onActivityDestroyed")
    }

    override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {
        println("AppLifecycleTracker onActivitySaveInstanceState")
    }

    override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
        println("AppLifecycleTracker onActivityCreated")
    }

    override fun onActivityResumed(activity: Activity) {
        println("AppLifecycleTracker onActivityResumed ${activity}")
    }

    private var numStarted = 0

    override fun onActivityStarted(activity: Activity?) {
        if (numStarted == 0) {
            println("AppLifecycleTracker Foreground")
            if (App.sinltonPojo?.launchData == 1) {
                activity?.startActivity(Intent(activity.application, GifViewActivity::class.java))
                activity?.overridePendingTransition(R.anim.enter, R.anim.exit)
            }
        }

        numStarted++
    }

    override fun onActivityStopped(activity: Activity?) {
        numStarted--
        if (numStarted == 0) {
            // app went to background
        }
    }
}

Ответы [ 3 ]

0 голосов
/ 13 марта 2020

Есть много способов сделать это на самом деле. Вы можете подумать о следующем.

Вместо того, чтобы регистрироваться для обратных вызовов жизненного цикла из вашего Application класса, я думаю, у вас может быть SplashActivity в качестве действия средства запуска и использование android:noHistory="true" в вашем AndroidManifest.xml для всех другие занятия.

<activity
    android:noHistory="true"
    android:label="@string/app_name"
    android:name=".activities.SplashActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<activity
    android:noHistory="true"
    android:name=".activities.MainActivity" />

Таким образом, вы можете запускать SplashActivity каждый раз, когда он возобновляется из фона, и вы можете иметь лог c перехода к другим действиям в вашем SplashActivity.

Надеюсь, это поможет.

0 голосов
/ 13 марта 2020

Я думаю, что вам нужно не каждый раз открывать экран spla sh, а показывать определенный экран c при возобновлении работы приложения. Идеологически экран spla sh не должен отображаться каждый раз, когда пользователь возвращается в приложение.

Правильный подход, который вы используете для этого. Если вам нужен экран, на котором вместо белого экрана будет отображаться ваше изображение, вы должны реализовать его с помощью темы.

  1. Создайте фоновый ресурс, который будет содержать ваше изображение.
  2. Укажите этот ресурс как android:windowBackground в вашей теме деятельности "spla sh".
  3. Установите эти темы для использования в вашей деятельности "spla sh".

Для получения дополнительной информации о которые проверяют эту статью .

0 голосов
/ 13 марта 2020

Одним из способов является вызов finish(); в вашей деятельности onStop(). Таким образом, ваше приложение снова откроет активность запуска в следующий раз.

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