【问题标题】:When I charge my app after using home button it starts in my first activity当我在使用主页按钮后为我的应用程序充电时,它从我的第一个活动开始
【发布时间】:2015-05-21 10:15:57
【问题描述】:

我确信这将是一个非常新手的问题,但我被困住了,我不知道如何摆脱这个问题!

我有一个包含三个活动的应用程序,当我使用 HOME 按钮并再次打开应用程序时,它始终会转到第一个活动,即使我在第二个或第三个活动。

编辑 3: 我的应用包含三个活动,第一个是主菜单,第二个是表格地图,第三个是表格数据。根据配置,关闭第三个活动必须将我带到第一个或第二个,当我离开第三个活动时,我不希望它留在活动堆栈上。我的程序从一个 Activity 到另一个运行良好。我的问题是,当我使用 Home Button 时,我的应用似乎完成了除第一个 Activity 之外的所有 Activity。

也许我必须修改清单上的任何内容,或者我必须以特定方式使用 RestoreInstanceState,但我搜索得很辛苦,却找不到任何东西。提前致谢!

编辑 1:我正在添加清单的“应用程序”xml 部分:

<application
    android:allowBackup="true"
    android:icon="@drawable/icobaccus"
    android:label="@string/app_name"
    android:theme="@style/AppTheme">
    <activity
        android:name="com.example.tpv2_tablet.Activity_Start"
        android:label="@string/app_name" 
        android:screenOrientation="landscape"
        android:windowSoftInputMode="adjustPan" 
        android:configChanges="keyboardHidden|keyboard"
        android:theme="@android:style/Theme.NoTitleBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name="com.example.tpv2_tablet.Activity_Zonas"
        android:label="@string/app_name" 
        android:screenOrientation="landscape"
        android:windowSoftInputMode="adjustPan" 
        android:configChanges="keyboardHidden|keyboard"
        android:theme="@android:style/Theme.NoTitleBar">
    </activity>
    <activity
        android:name="com.example.tpv2_tablet.PrintDialogActivity"
        android:label="@string/app_name" 
        android:screenOrientation="landscape"
        android:windowSoftInputMode="adjustPan" 
        android:configChanges="keyboardHidden|keyboard"
        android:theme="@android:style/Theme.NoTitleBar">
    </activity>
    <activity
        android:name="com.example.tpv2_tablet.Activity_Mesas"
        android:label="@string/app_name" 
        android:screenOrientation="landscape"
        android:windowSoftInputMode="adjustPan" 
        android:configChanges="keyboardHidden|keyboard">
    </activity>
</application>

编辑 2:也许我在调用其他活动时做错了什么,或者我调用了错误的标志:

Intent intent = new Intent(Activity_1.this, Activity_2.class);
                            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                            finish();
                            startActivity(intent);

【问题讨论】:

  • 如果您发布代码,我们可以为您提供帮助。但在询问之前检查Android Lifecycle 的工作原理并尝试找出您的问题
  • 我检查了它,我有点困惑......你想要代码的哪一部分?显现? OnCreate()?

标签: android performance android-intent android-activity android-homebutton


【解决方案1】:

删除

<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>

来自所有activities,除了launcher activity

要了解原因,请阅读Google Documentation here

删除:

android:noHistory="true"

因为这将从activity stack 中删除activity

删除

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
finish();

来自

Intent intent = new Intent(Activity_1.this, Activity_2.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
finish();
startActivity(intent); 

了解原因检查this answer

【讨论】:

  • 我做了但没有工作。我又要开始第一个活动了。我已经阅读了意图文档,但我没有发现任何明确的内容......
  • @Óscar_Rubio 也从活动中删除 android:noHistory="true"
  • 现在似乎正在工作。我已经删除了“noHistory”和 Intent 过滤器,现在工作正常,只需要解决一些问题。谢谢你的耐心! (不必修改标志或完成())。
【解决方案2】:

您需要在您的 android 清单中设置 android:clearTaskOnlaunch="false"

【讨论】:

  • 我在我的非启动器活动中写下了这句话,但它们的工作方式相同 =/.
  • 能否将包含intents和manifest的代码块添加到post中?
  • 正如@hrskrs 所说,您必须删除除 Activity_Start 之外的主要意图过滤器。此外,您不需要将 clearTaskOnLaunch 设置为 false。因为默认值为false
  • @Óscar_Rubio 你必须使用finish() 和intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);在传递活动时。这可能是原因,因为您正在扼杀过去的活动
  • 但是如果我杀死了第一个活动并且我在第二个活动中,为什么当我按下 HOME 后重新打开应用程序时,我又回到了第一个活动?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-25
  • 2018-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多