【问题标题】:Start Splash screen every time if user press home button or back button from main activity如果用户从主要活动中按下主页按钮或返回按钮,则每次启动启动画面
【发布时间】:2015-11-05 11:37:49
【问题描述】:

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

一旦启动屏幕任务移动到下一个 MainActivity.. 但我的要求是..如果用户按下主页按钮或 backPress 。当用户再次恢复应用程序时,它应该从启动屏幕开始,而不是从 MainActivity。

提前谢谢

【问题讨论】:

    标签: android splash-screen


    【解决方案1】:

    我看到这里的每个答案都说要覆盖 onResume() 方法。这是一个坏主意。为什么?好吧,当您在MainActivity 并接到电话时,您仍然可以在后台看到活动,因为它处于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();
          }
     }
    

    【讨论】:

    • 按下主页按钮时..以及用户恢复应用程序时..启动画面
    • 您需要根据您在onStop 中设置的标志在onStart 中启动Acitivity。
    【解决方案2】:

    如果您在开始新的 Activity 之前没有完成您的 Activity,您将在后按时返回 Splash Activity。

    覆盖 OnResume 并启动您的启动 Activity,以便在应用程序恢复时从启动启动它。

    @Override
    protected void onResume() {
        super.onResume();
        startActivity(new Intent(this , SplashActivity.class));
        finish();
    }
    

    就这样……

    【讨论】:

      【解决方案3】:
      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 调用其他活动,当前甚至不会启动,它会直接执行声明的意图,

      【讨论】:

      • 我改了答案
      【解决方案4】:

      在您的 MainActivity 中尝试此代码

      @Override
          protected void onResume() {
              super.onResume();
              startActivity(new Intent(this , SplashActivity.class));
              finish();
          }
      

      编辑你可以使用flag来检测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 .....无限时间加载吗?
      • 只是这样
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      相关资源
      最近更新 更多