如果用户从主活动按下主页按钮或返回按钮,则每次启动闪屏屏幕。

3

我有两个活动。 1] 启动画面 2] 主活动

一旦启动画面任务完成,它就会转到下一个主活动。但我的要求是,如果用户按Home键或返回键,并且当用户再次恢复应用程序时,它应该从启动画面开始,而不是从主活动开始。

提前致谢。

4个回答

2
我看到这里的每一个答案都建议覆盖onResume()方法。这是不好的主意。为什么?因为当你在MainActivity中接到电话时,你仍然可以看到后台中的活动,因为它处于onPause()状态。当你解除通话时,onResume()将被调用,然后将调用SplashActivity。这不是一个良好的用户体验,也不是你可能正在寻找的内容。
此外,onResume()在创建MainActivity时会被调用。因此,如果你在onResume()中放置了startActivity()代码而没有任何条件检查,你将永远看不到MainActivity本身。当创建MainActivity时,SplashActivity将立即启动。
那么,如何实现你想要的效果呢?
  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();
      }
 }

当用户按下主页按钮时...以及当用户恢复应用程序时...启动闪屏屏幕。 - user5475272
你需要根据在 onStop 中设置的标志,在 onStart 中启动 startActivity - Henry

1
如果您在开始新活动之前未完成当前活动,则按返回键将返回到闪屏活动。
覆盖OnResume并启动您的闪屏活动,以便在应用程序恢复时从闪屏开始。
@Override
protected void onResume() {
    super.onResume();
    startActivity(new Intent(this , SplashActivity.class));
    finish();
}

就像这样...

1
  1. 对于Home按钮按下

在你的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,因此如果你在onResume中调用了其他活动,当前活动将不会启动,直接跳转到声明的意图。


我已经改变了答案。 - Iamat8

0

在你的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();
        }
    }

它不会一直像SplashAct->MainAct->SplashAct->MainAct……无限次加载吗? - Arjun
它只是这样做。 - user5475272

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接