gpt4 book ai didi

android - 启动器开发 - 主页按钮不会返回初始 Activity

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:00:29 26 4
gpt4 key购买 nike

我有一个用作启动器的应用程序。这个应用程序有 3 个 Activity :

  • SplashActivity:加载时显示启动画面,然后启动 LauncherActivity 并完成。这是 list 中标记为启动器的 Activity。

    startActivity(Intent(this, LauncherActivity::class.java))
    finish()

    <activity
    android:name=".SplashActivity"
    android:label="@string/app_name"
    android:screenOrientation="landscape"
    android:theme="@style/SplashTheme">
    <intent-filter>
    <action android:name="android.intent.action.MAIN"/>
    <category android:name="android.intent.category.LAUNCHER"/>
    <category android:name="android.intent.category.HOME" />
    <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
    </activity>
  • LauncherActivity:启动器的主要 Activity 。有一个启动 DashboardActivity 的菜单按钮。

     startActivity(Intent(this@LauncherActivity, DashboardActivity::class.java))

    <activity
    android:name=".LauncherActivity"
    android:launchMode="singleTask"
    android:screenOrientation="landscape" />
  • DashboardActivity:显示应用列表并通过其启动 Intent 启动它们。

    private val DEFAULT_FLAGS_APP_LAUNCH = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
    startActivity(packageManager.getLaunchIntentForPackage(packageInfo.packageName).apply {
    flags = DEFAULT_FLAGS_APP_LAUNCH
    })

    <activity
    android:label="@string/apps"
    android:theme="@style/TNA"
    android:name=".DashboardActivity"
    android:launchMode="singleTask"
    android:screenOrientation="landscape" />

所有 Activity 都通过 startActivity 启动,包括应用程序。

我想要标准的 Android 启动器行为,即:当通过 DashboardActivity 进入应用程序时,如果我单击主页按钮,转到主启动器 Activity (LauncherActivity) ,然后单击返回时,转到仪表板 (DashboardActivity)。

我遇到的问题是,当单击主页时,它返回到 DashboardActivity,而不是 LauncherActivity。如果我完成 DashboardActivity,然后在应用程序上单击返回时,它会返回到 LauncherActivity

关于如何解决这个问题有什么想法吗?

最佳答案

这绝对与返回/任务堆栈相关。参见 this link有关任务堆栈的更多信息。

当您从 LauncherActivity 转到 DashboardActivity 时,仪表板被放置到任务堆栈上。当通过 HOME 按钮再次请求 LauncherActivity 时,任务堆栈将恢复到启动 LauncherActivity 后使用的最后一个 Activity ,即 DashboardActivity

您有几种不同的选择来解决这个问题:

  1. 不要为“仪表板”使用单独的Activity。考虑一个抽屉,甚至是一个显示内容的 Fragment,当完成调用 startActivity 启动另一个时,可以弹出回主 LauncherActivity应用程序。
  2. 在您的 DashboardActivity 调用 startActivity 之后,它应该调用 finish() 以便它从当前任务堆栈中弹出。
  3. 通常启动器设置为以 singleInstance 模式启动,防止启动器 Activity 的多个实例同时运行。请注意,您需要在 LauncherActivity 中支持 onNewIntent
  4. 为防止与任务管理器进行奇怪的交互,请考虑在启动 DashboardActivity 时设置 FLAG_ACTIVITY_NO_HISTORY

关于android - 启动器开发 - 主页按钮不会返回初始 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48546555/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com