我有一个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了解详情。
答案 0 :(得分:1)
Intent.FLAG_ACTIVITY_CLEAR_TOP
清除堆栈中目标活动之上的所有内容。在您的情况下,当您调用SplashScreen时,您告诉MainActivity自行关闭。
答案 1 :(得分:1)
如果您只想展示 SplashScreen(意为图片), 那么您应该考虑在与主布局相同的级别上在任何布局中创建 ImageView。
然后,您可以在代码中使 ImageView / SplashScreen可见或隐藏。
这样可以节省大量的工作。