我有两个活动。 1] 启动画面 2] 主活动
一旦启动画面任务完成,它就会转到下一个主活动。但我的要求是,如果用户按Home键或返回键,并且当用户再次恢复应用程序时,它应该从启动画面开始,而不是从主活动开始。
提前致谢。
我有两个活动。 1] 启动画面 2] 主活动
一旦启动画面任务完成,它就会转到下一个主活动。但我的要求是,如果用户按Home键或返回键,并且当用户再次恢复应用程序时,它应该从启动画面开始,而不是从主活动开始。
提前致谢。
onResume()
方法。这是不好的主意。为什么?因为当你在MainActivity
中接到电话时,你仍然可以看到后台中的活动,因为它处于onPause()
状态。当你解除通话时,onResume()
将被调用,然后将调用SplashActivity
。这不是一个良好的用户体验,也不是你可能正在寻找的内容。onResume()
在创建MainActivity
时会被调用。因此,如果你在onResume()
中放置了startActivity()
代码而没有任何条件检查,你将永远看不到MainActivity
本身。当创建MainActivity
时,SplashActivity
将立即启动。SplashActivity
启动MainActivity
后,不要finish()
SplashActivity
。让它保留在后台堆栈中,这样当你按下返回按钮时,你将回到SplashActivity
。MainActivity
的onStop()
方法中设置一个标志来记录MainActivity
是否被最小化。然后在onStart()
中检查这个标志,只有在设置了这个标志时才启动SplashActivity
。这是为了确保应用程序被最小化并正在恢复。 private boolean isMinimized = false;
@Override
protected void onStop() {
super.onStop();
isMinimized = true;
}
@Override
protected void onStart() {
super.onStart();
if(isMinimized){
startActivity(new Intent(this , SplashActivity.class));
isMinimized = false;
finish();
}
}
@Override
protected void onResume() {
super.onResume();
startActivity(new Intent(this , SplashActivity.class));
finish();
}
在你的SplashScreen
AndroidManifest.xml文件的intent-filter中使用Home
作为类别
<intent-filter>
....
//-- this will show up your app when home button pressed (like laucher)
<category android:name="android.intent.category.HOME" />
</intent-filter>
用意图覆盖它们到启动屏幕
@Override
public void onBackPressed() {
startActivity(new Intent(this , SplashActivity.class));
finish();
}
OnResume
根据this,在进入运行状态之前会调用OnResume
,因此如果你在onResume
中调用了其他活动,当前活动将不会启动,直接跳转到声明的意图。
在你的MainActivity中尝试这段代码
@Override
protected void onResume() {
super.onResume();
startActivity(new Intent(this , SplashActivity.class));
finish();
}
编辑 您可以使用标志来检测第一次调用onResume
的时机
int flag = 0;
将您的 onResume 代码更改为以下内容:
@Override
protected void onResume() {
super.onResume();
if(flag == 0) {
flag = 1 ;
}
else {
flag = 1 ;
startActivity(new Intent(this, SplashActivity.class));
finish();
}
}
onStop
中设置的标志,在onStart
中启动startActivity
。 - Henry