【问题标题】:Why isn't the MAIN and LAUNCHER activity not starting first?为什么不是首先启动 MAIN 和 LAUNCHER 活动?
【发布时间】:2025-12-10 18:10:02
【问题描述】:

我有 2 个活动,“Splash”和“StartingPoint”。我的 XML 明确指出“Splash”是带有 MAIN 和 LAUNCHER 的 Activity,但是在运行应用程序时,“StartingPoint”似乎总是首先运行。我该如何解决?

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.commer.commest"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <activity android:name="com.commer.commest.Splash" 
                  android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="com.commer.commest.StartingPoint" 
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="com.commer.commest.STARTINGPOINT" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
    </application>

</manifest>

【问题讨论】:

    标签: java android xml


    【解决方案1】:

    面临类似问题,
    就我而言,罪魁祸首是

    android:launchMode="singleInstance"

    我必须从 Splash 中删除它才能每次启动它。

        <activity
            android:name=".features.splash.SplashActivity"
            android:launchMode="singleInstance"  // had to remove this
            android:screenOrientation="portrait"
            android:theme="@style/SplashTheme"
            android:windowSoftInputMode="stateHidden">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
    
                <category android:name="android.intent.category.LAUNCHER" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
    
        <activity
            android:name=".features.login.LoginActivity"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="stateHidden" />
    

    【讨论】:

    • 我试过删除单个实例后它不起作用
    【解决方案2】:

    更新如下:

    <activity android:name="com.commer.commest.StartingPoint" 
                      android:label="@string/app_name">
            </activity>
    

    而不是

    <activity android:name="com.commer.commest.StartingPoint" 
                      android:label="@string/app_name">
                <intent-filter>
                    <action android:name="com.commer.commest.STARTINGPOINT" />
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
            </activity>
    

    【讨论】:

      【解决方案3】:

      你应该改变这个:

         <application
          android:allowBackup="true"
          android:icon="@drawable/ic_launcher"
          android:label="@string/app_name"
          android:theme="@style/AppTheme" >
      
          <activity android:name="com.commer.commest.Splash" 
                    android:label="@string/app_name" >
              <intent-filter>
                  <action android:name="android.intent.action.MAIN" />
                  <category android:name="android.intent.category.LAUNCHER" />
              </intent-filter>
          </activity>
      
          <activity android:name="com.commer.commest.StartingPoint"/> 
      
      
      </application>
      

      【讨论】:

      • 我进行了更改并删除了 元素,但“StartingPoint”活动仍然首先运行。 ActivityManager:开始:Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.commer.commest/.StartingPoint }
      • 是的,当我完全移除 StartingPoint Activity 时,Splash 将成为第一个 Activity,但当我将它放回去时,它又恢复了原来的样子
      • 你用过这个一个吗??
      • 是的,我也试过了,StartingPoint Activity 一直是第一个出现的 Activity
      • 嘿 Piyush,我意识到我的错误...我将 avd 的运行配置设置为 StartingPoint Activity!对不起,我可能给你的所有困惑。感谢您和这里的每个人提供的所有帮助!
      【解决方案4】:
              <intent-filter>
                  <action android:name="com.commer.commest.STARTINGPOINT" />
                  <category android:name="android.intent.category.DEFAULT" />
              </intent-filter>
      

      删除这些行。你的问题解决了

      其实你把这个应用设为默认启动器应用就不用写了

      享受

      【讨论】:

        【解决方案5】:

        您能否尝试将活动 android:name 更改为仅 .Splash,以及您的起点。

        <activity android:name=".Splash"
        
        <activity android:name=".StartingPoint"
        

        【讨论】:

        • 刚试了一下,'StartingPoint'是第一个启动的Activity
        【解决方案6】:

        您在com.commer.commest.STARTINGPOINT 活动中添加了默认类别,这就是您遇到此问题的原因。从活动 com.commer.commest.STARTINGPOINT 中删除意图过滤器。为什么要在此处添加 DEFAULT 类别?如果您想了解默认类别的使用,请点击链接here

        简而言之,如果您将 CATEGORY_DEFAULT 添加到活动中,它将成为应用程序上下文的默认活动。因此,无论何时调用Context.startActivity(),都会声明您的默认活动。

        享受编码!

        【讨论】:

          【解决方案7】:

          顾名思义,DEFAULT 类别(意图过滤器),用于将某些操作声明为默认操作。例如,如果您希望在打开应用程序时打开特定活动。您在清单中实现这一点:

                  <intent-filter>
                      <action android:name="package name" />
                      <category android:name="android.intent.category.DEFAULT" />
                  </intent-filter>
          

          尝试从包名称“com.commer.commest.StartingPoint”下的代码中删除意图过滤器。像这样:

          <activity android:name="com.commer.commest.StartingPoint" 
                    android:label="@string/app_name">
          </activity>
          

          【讨论】:

            【解决方案8】:

            您应该按照以下线程的建议检查运行配置: https://*.com/a/19311925/2219924

            我遇到了完全相同的问题,也尝试了这里建议的所有方法,但没有运气。 Eclipse 本身就是让人头疼的地方……

            【讨论】:

              【解决方案9】:

              花时间发现配置级别的问题。

              您可以通过转到“Edit Configurations”菜单(点击“Shift”三次,键入“Edit Configurations”),然后将 Launch Options > Launch 更改为“Nothing”来让 Android Studio 不抱怨。

              我可能会添加一个包含说明的通用活动。

              【讨论】: