簡體   English   中英

為什么在firebase onAuthStateChanged中完成活動時,最近的應用程序中沒有屏幕截圖

[英]Why is there no screenshot in recent apps when finnishing activity in firebase onAuthStateChanged

我有一個非常基本的splashscreen活動:

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_start);

    FirebaseAnalytics.getInstance(this);


    mAuth = FirebaseAuth.getInstance();
    mAuth.addAuthStateListener(new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user = firebaseAuth.getCurrentUser();
            if (user != null) {
                FirebaseAuth.getInstance().removeAuthStateListener(this);
                startActivity(new Intent(StartActivity.this, MainActivity.class));
                finish();
            }
        }
    });
}

此啟動畫面打開我的MainActivity 當我關閉此活動時,這是最近的應用程序中的屏幕截圖:

在此輸入圖像描述

好像它制作截圖太晚了,導致這個嵌套的最近應用截圖。 這也發生在實際設備上。 我怎樣才能解決這種奇怪的行為?

活動清單:

<activity
    android:name="activities.StartActivity"
    android:label="@string/app_name"
    android:screenOrientation="portrait">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<activity
    android:name="activities.MainActivity"
    android:label="@string/app_name"
    android:screenOrientation="portrait"
    android:launchMode="singleTask">
</activity>

問題似乎不在launchMode 我一直有同樣的行為。 即使拆除了lauchmode。

它與回調絕對有關。 直接啟動活動時,沒有問題。

編輯:

我找到了一個解決方案。 使用延遲啟動活動會解決它。 雖然硬編碼延遲不是很好。

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        startActivity(new Intent(StartActivity.this, MainActivity.class));
        finish();
    }
},500);

編輯2

直接啟動活動時我沒有這種行為。 所以它可能與回調有關。 我正在使用谷歌登錄。 看起來有些透明活動正在關閉。 這可能是Google登錄活動嗎?

而不是調用finish(); 你可以在你的應用程序清單中使用android:noHistory="true" ,如下所示:

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

或者您可以在Intent中使用FLAG_ACTIVITY_CLEAR_TOP

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

編輯:

為什么你使用android:launchMode="singleTask" 您應該將其更改為android:launchMode="singleInstance"或完全刪除此行。 有關更多信息, 這里有一篇關於啟動模式的精彩文章

我猜你的問題是由於使用沒有taskAffinity launchMode singleTasktaskAffinity

讓我們改變AndroidManifest.xml

<activity
    android:name="activities.StartActivity"
    android:label="@string/app_name"
    android:screenOrientation="portrait">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<activity
    android:name="activities.MainActivity"
    android:label="@string/app_name"
    android:screenOrientation="portrait"
    android:launchMode="singleTask"
    android:taskAffinity="your_any_string">
</activity>

希望它有所幫助!

我無法重現您所描述的問題,但由於您說使用Handler.postDelayed()幫助,請嘗試下面的代碼。

通過在onResume()/onPause()之間添加/刪除偵聽器,您還可以避免在應用程序處於后台時啟動活動。 此外,如果FirebaseAuth包含一個偵聽器列表,那么如果多次觸及onCreate()方法,它將保留對已經銷毀的活動的引用,例如在旋轉時。 所以你可以避免內存泄漏。

private FirebaseAuth.AuthStateListener authStateListener;

@Override
protected void onResume() {
    super.onResume();

    FirebaseAnalytics.getInstance(this);

    authStateListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user = firebaseAuth.getCurrentUser();
            if (user != null) {
                FirebaseAuth.getInstance().removeAuthStateListener(this);
                authStateListener = null;
                startActivity(new Intent(StartActivity.this, MainActivity.class));
                finish();
            }
        }
    };
    FirebaseAuth.getInstance().addAuthStateListener(authStateListener);
}

@Override
protected void onPause() {
    super.onPause();
    if (authStateListener != null) {
        FirebaseAuth.getInstance().removeAuthStateListener(authStateListener);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM