如果用户从主菜单按下主页按钮或后退按钮,每次都会启动启动画面 activity
Start Splash screen every time if user press home button or back button from main activity
我有两个activity。
1]启动画面
2]主要活动
一旦闪屏任务结束,它就会移动到下一个 MainActivity..
但我的要求是..如果用户按下主页按钮或 backPress 。当用户再次恢复应用程序时,它应该从闪屏开始,而不是从 MainActivity 开始。
提前致谢
在您的 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();
}
}
如果您在开始新的之前没有完成您的 Activity,您将返回 Splash Activity。
重写 OnResume 并启动启动画面Activity 以便在应用程序恢复时从启动画面启动它。
@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
调用其他 activity 当前甚至不会启动它将直接执行声明的意图,
我看到这里的每个答案都说要覆盖 onResume()
方法。这是一个坏主意。为什么?那么,当您处于 MainActivity
状态并接到电话时,您仍然可以在后台看到 activity,因为它处于 onPause()
状态。当您关闭呼叫时,将呼叫 onResume()
,然后呼叫 SplashActivity
。这不是良好的用户体验,也不是您想要的。
此外,onResume()
在 MainActivity
的创建过程中被调用。因此,如果您将 startActivity()
代码放在 onResume()
中而不进行任何条件检查,您将永远不会看到 MainActivity
本身。 SplashActivity
将在创建 MainActivity
后立即开始。
那么,如何完成你想要的呢?
从 SplashActivity
开始 MainActivity
后,不要 finish()
SplashActivity
。让它保留在后退堆栈中,所以当您按下后退按钮时,您将转到 SplashActivity
.
在 MainActivity
的 onStop()
方法中设置一个标记以注意 MainActivity
已最小化。然后在 onStart()
中检查此标志并仅在设置此标志时才启动 SplashActivity
。这是为了确保应用程序已最小化并正在恢复。
MainActivity:
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();
}
}
我有两个activity。 1]启动画面 2]主要活动
一旦闪屏任务结束,它就会移动到下一个 MainActivity.. 但我的要求是..如果用户按下主页按钮或 backPress 。当用户再次恢复应用程序时,它应该从闪屏开始,而不是从 MainActivity 开始。
提前致谢
在您的 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();
}
}
如果您在开始新的之前没有完成您的 Activity,您将返回 Splash Activity。
重写 OnResume 并启动启动画面Activity 以便在应用程序恢复时从启动画面启动它。
@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
调用其他 activity 当前甚至不会启动它将直接执行声明的意图,
我看到这里的每个答案都说要覆盖 onResume()
方法。这是一个坏主意。为什么?那么,当您处于 MainActivity
状态并接到电话时,您仍然可以在后台看到 activity,因为它处于 onPause()
状态。当您关闭呼叫时,将呼叫 onResume()
,然后呼叫 SplashActivity
。这不是良好的用户体验,也不是您想要的。
此外,onResume()
在 MainActivity
的创建过程中被调用。因此,如果您将 startActivity()
代码放在 onResume()
中而不进行任何条件检查,您将永远不会看到 MainActivity
本身。 SplashActivity
将在创建 MainActivity
后立即开始。
那么,如何完成你想要的呢?
从
SplashActivity
开始MainActivity
后,不要finish()
SplashActivity
。让它保留在后退堆栈中,所以当您按下后退按钮时,您将转到SplashActivity
.在
MainActivity
的onStop()
方法中设置一个标记以注意MainActivity
已最小化。然后在onStart()
中检查此标志并仅在设置此标志时才启动SplashActivity
。这是为了确保应用程序已最小化并正在恢复。
MainActivity:
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();
}
}