簡體   English   中英

從 MainActivity 切換或刪除啟動畫面

[英]Switch or Remove Splash Screen from MainActivity

我有一個 MainActivity 在某些設備上冷啟動時間很長,所以我想使用啟動屏幕並從我的 MainActivity 上的 function 觸發它來完成。

我使用我的 SplashActivity 作為啟動器,然后加載我的 MainActivity。 這在我在 SplashActivity 中設置時有效,但是我的 SplashActivity 突然結束並且在冷啟動時仍然出現空白屏幕,然后啟動應用程序主循環。

下面的代碼很快結束了初始屏幕並運行 MainActivity 仍然帶有長時間的冷啟動空白屏幕。

我知道這也適用於超時/計時器,正如我在大多數答案中看到的那樣,但我想通過使用 function 或一旦我的 NativeActivity 主循環開始在我的 MainActivity 中觸發它。 我正在使用 JNI 從 C++ 調用 java 函數。

編輯:我還找到了在 MainActivity 中使用片段的替代解決方案,但不知道從哪里開始,因為作者沒有在這里詳細分享解決方案:

https://stackoverflow.com/a/44444946/11736918

public class SplashActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        Intent intent = new Intent(this, MainActivity.class); 
        startActivity(intent);
        finish();
    }
}


我的 MainActivity 只是加載了另一個 Native.so 庫。

public class MainActivity extends NativeActivity {

    static {
        System.loadLibrary("MyLib");    
    }

    public void RemoveSplash() {
      // Ideally I will use this to trigger it from my C++ code using JNI.
    }


}

這是我的 AndroidManifest.xml

        <activity android:name=".MainActivity"
                android:label="@string/app_name"
                android:configChanges="orientation|keyboardHidden"
                android:screenOrientation="landscape">
            <!-- Tell NativeActivity the name of or .so -->
            <meta-data android:name="android.app.lib_name"
                    android:value="native-activity" />
        </activity>

        <activity android:name=".SplashActivity"
                    android:theme="@style/SplashTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>    

像這樣在啟動時更改您的代碼:

final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
   @Override
   public void run() {
   Intent intent = new Intent(SplashActivity.this, MainActivity.class); 
   startActivity(intent);
   finish();       
   }
}, 100);

或者,您可以從清單設置 MainActivity 的主題

<activity
        android:name=".MainActivity"
        android:theme="@style/SplashTheme">

SplashTheme 是

<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="colorPrimary">@color/colorAccent</item>
    <item name="colorPrimaryDark">@color/colorAccent</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item 
       name="android:windowBackground">@drawable/img_app_splash_screen</item>
</style>

然后,當您的 function 完成時,在super.onCreate()之前調用您的 function ,調用setTheme(R.style.AppTheme) ,然后調用super.onCreate()setContentView(R.layout.activity_main)

不需要 SplashActivity

暫無
暫無

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

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