Переключение или удаление экрана Spla sh с MainActivity - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть MainActivity, которая имеет длительный холодный запуск на некоторых устройствах, поэтому я хотел бы использовать экран spla sh и переключать его из функции на моей MainActivity на fini sh.

Я использую мой SplashActivity в качестве модуля запуска, а затем загрузить мой MainActivity. Это работает, когда я устанавливаю его в SplashActivity, но моя SplashActivity внезапно завершается и все равно выдает пустой экран при холодном запуске, а затем запускает главное приложение l oop.

Ниже кода скоро заканчивается экран spla sh и MainActivity по-прежнему работает с длинным пустым экраном холодного запуска.

Я знаю, что это также будет работать с тайм-аутом / таймером, как я видел в большинстве ответов, но я хотел бы вызвать его внутри своей MainActivity с помощью функции или как только моя основная NativeActivity l oop запускается. Я использую JNI для вызова java функций из C ++.

Edit: Я также нашел альтернативное решение по использованию фрагментов внутри MainActivity, но не знаю, с чего начать как автор не поделился решением подробно здесь:

{ ссылка }

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

        super.onCreate(savedInstanceState);

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


My 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>    

1 Ответ

0 голосов
/ 09 апреля 2020

измените свой код на spla sh, например так:

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>

затем вызовите вашу функцию до super.onCreate(), когда ваша функция будет завершена, вызовите setTheme(R.style.AppTheme), затем вызовите super.onCreate() и setContentView(R.layout.activity_main)

без необходимости SplashActivity

...