不通过设置 activity 在 return 上显示启动画面

Do not show splash screen on return from settings activity

我有一个应用程序将 SplashScreen 加载为全屏 Dialog,在加载 MainActivity 时关闭。然而,这里的问题是每当我打开 SettingsActivity 并通过以下方式返回 MainActivity 时:

  1. 在 Android 后退按钮按下时,SplashScreen 将不会显示。所以这里没问题!
  2. 按下 ActionBar 上的向上导航,再次显示 SplashScreen。这就是问题所在,我不想再次显示 SplashScreen

这是我的 MainActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setPreferencesFromSettings();
    if (splashScreenDisplayed) {showSplash(); splashScreenDisplayed = false; }
    //...DO SOMETHING ELSE...//
}

public void showSplash() {
    final Dialog dialog = new Dialog(MainActivity.this, android.R.style.Theme_Light_NoTitleBar);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.activity_splash_screen);
    dialog.setCancelable(true);
    dialog.show();

    final Handler handler  = new Handler();
    final Runnable runnable = new Runnable() {
        @Override
        public void run() {
                dialog.dismiss();
        }
    }; handler.postDelayed(runnable, 3500);
}

@Override
public void onRestart() {
    super.onRestart();
    splashScreenDisplayed = false;
    setPreferencesFromSettings();
}

AndroidManifest.xml:

<application
    android:name=".AnalyticsApplication"
    android:fullBackupContent="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
    <activity
        android:name=".SettingsActivity"
        android:label="Settings"
        android:parentActivityName=".MainActivity"
        android:theme="@style/AppTheme">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".MainActivity" />
    </activity>
</application>

我尝试了其他一些帖子,但它们对我不起作用。我知道我在某处遗漏了一行代码或其他东西,我花了几个小时一遍又一遍地查看代码,但我什么也没找到。

在此先感谢您的帮助!

我最终使用 SharedPreferncesSplashNotDisplayed 存储了一个密钥,并在每次加载 MainActivity 时读取它。

我在 myapplication.java 中将密钥设置为 True 因为每个应用程序实例只加载一次,一旦显示启动画面,我将密钥设置为 False 和下一个加载 MainActivity 时,SplashNotDisplayed 键将为 false,不会再次显示。

MyApplication.java

SharedPreferences prefs = getSharedPreferences("prefs", MODE_PRIVATE);
SharedPreferences.Editor shPrefEditor = prefs.edit();
shPrefEditor.putBoolean("splashNotDisplayed", true);
shPrefEditor.apply();

MainActivity.java 中我更改了此

的实现
if (splashScreenDisplayed) {showSplash(); splashScreenDisplayed = false; }

对此:

boolean splashNotDisplayed = prefs.getBoolean("splashNotDisplayed", true);
if (splashNotDisplayed) {
    showSplash();
    shPrefEditor.putBoolean("splashNotDisplayed", false);
    shPrefEditor.apply();
}