返回活动而不创建新实例

时间:2013-08-05 22:27:23

标签: android android-intent android-activity

我有一个SplashScreenActivity,如果在MainActivity上没有检测到触摸,它将每2分钟运行一次。如果在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);        

...当Intent启动时,但我的库和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。

点击here了解详情。

2 个答案:

答案 0 :(得分:1)

Intent.FLAG_ACTIVITY_CLEAR_TOP清除堆栈中目标活动之上的所有内容。在您的情况下,当您调用SplashScreen时,您告诉MainActivity自行关闭。

答案 1 :(得分:1)

如果您只想展示 SplashScreen(意为图片), 那么您应该考虑在与主布局相同的级别上在任何布局中创建 ImageView。

然后,您可以在代码中使 ImageView / SplashScreen可见或隐藏

这样可以节省大量的工作。