如果用户从主菜单按下主页按钮或后退按钮,每次都会启动启动画面 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();
}

就这样...

  1. 按下主页按钮

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>
  1. 按下后退按钮

为了闪屏而覆盖它们

@Override
public void onBackPressed() {
    startActivity(new Intent(this , SplashActivity.class));
    finish();
}
  1. 恢复

    在进入 运行 状态之前 OnResume 是根据 this 调用的,所以如果你在 onResume 调用其他 activity 当前甚至不会启动它将直接执行声明的意图,

我看到这里的每个答案都说要覆盖 onResume() 方法。这是一个坏主意。为什么?那么,当您处于 MainActivity 状态并接到电话时,您仍然可以在后台看到 activity,因为它处于 onPause() 状态。当您关闭呼叫时,将呼叫 onResume(),然后呼叫 SplashActivity。这不是良好的用户体验,也不是您想要的。

此外,onResume()MainActivity 的创建过程中被调用。因此,如果您将 startActivity() 代码放在 onResume() 中而不进行任何条件检查,您将永远不会看到 MainActivity 本身。 SplashActivity 将在创建 MainActivity 后立即开始。


那么,如何完成你想要的呢?

  1. SplashActivity 开始 MainActivity 后,不要 finish() SplashActivity。让它保留在后退堆栈中,所以当您按下后退按钮时,您将转到 SplashActivity.

  2. MainActivityonStop() 方法中设置一个标记以注意 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();
      }
 }