2

我有一个 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 而无需创建新实例。

点击这里了解更多信息。

4

2 回答 2

1

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

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

这样,您可以节省大量工作。

于 2013-08-05T23:10:49.503 回答
1

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

于 2013-08-05T22:37:23.623 回答