2

MainActivity でタッチが検出されない場合、2 分ごとに実行される SplashScreenActivity があります。SplashScreenActivity で「開始」ボタンが押されると、MainActivity が開始されます。

私の問題は、SplashScreenActivity で [開始] ボタンを押すと、MainActivity の新しいインスタンスが毎回作成されるため、ライブラリが読み込まれ、毎回 (OnCreate() で) 初期化されることです。これにより、アプリケーションの速度が大幅に低下し、ボタンが押されたときに遅延が発生します。アプリケーションが最初に起動されたときに一度だけ実行したい。

使ってみました

    new Handler().postDelayed(new Runnable() {       
            /*
             * Showing splash screen with a timer. This will be useful when you
             * want to show case your app logo / company
             */

            @Override
            public void run() {
                // This method will be executed once the timer is over
                // Start your app main activity
                Intent i = new Intent(SplashScreen.this, MainActivity.class);
                i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);   
                startActivity(i);

                // close this activity
                finish();
            }
    }, SPLASH_TIME_OUT);        

...インテントが開始されたとき、私のライブラリと MainActivity の OnCreate() での初期化がまだ再度実行されています。

SplashScreenActivity で「開始」ボタンが押されると、次のメソッドが実行されます。

    public void startIntent(View v){
         Intent i = new Intent(SplashScreen.this, MainActivity.class);
         i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);   
         startActivity(i);
     }

何か助けはありますか?


現在、次の行があります (setFlags を取り出したもの):

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

それでも MainActivity の OnCreate() は、アクティビティが開始されるたびに呼び出されています。


したがって、次のように設定すると、次のことがわかりました。

intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);  

新しいインスタンスを作成せずに MainActivity に正常に戻ることができます。

詳細については、ここをクリックしください。

4

2 に答える 2

1

Intent.FLAG_ACTIVITY_CLEAR_TOPスタック内のターゲット アクティビティの上にあるすべてをクリアします。あなたの場合、SplashScreen を呼び出すと、MainActivity にそれ自体を閉じるように指示しています。

于 2013-08-05T22:37:23.623 に答える