Android 防止每次打开APP都显示启动页

测试发现的一个问题,在某台小米设备上,打开App后操作,按home键,再次点击桌面图标进入APP,此时会重新打开一次启动页SplashActivity,解决方法,在启动页的onCreate方法中添加如下代码,直接上code;

c 复制代码
    if (!this.isTaskRoot()) {
            Intent intent = getIntent();
            if (intent != null) {
                String action = intent.getAction();
                if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && Intent.ACTION_MAIN.equals(action)) {
                    finish();
                    return;
                }
            }
        }

if (!this.isTaskRoot())

isTaskRoot() 是 Activity 类中的一个方法,用于判断当前 Activity 是否是任务栈的根 Activity。如果当前 Activity 不是栈中的第一个活动(根活动),则返回 false,进入 if 语句块。

Intent intent = getIntent();

getIntent() 获取当前 Activity 启动时传入的 Intent。

if (intent != null)

确保 Intent 对象不为空,继续进行检查。

String action = intent.getAction();

从 Intent 获取动作(action),即启动 Activity 时指定的 action 字符串。

if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && Intent.ACTION_MAIN.equals(action))

这里检查 Intent 是否包含 CATEGORY_LAUNCHER 分类,并且 action 是否为 ACTION_MAIN。

CATEGORY_LAUNCHER 用来标识应用程序的启动入口。

ACTION_MAIN 是启动应用程序时传递的标准动作,通常用于表示主屏幕上的图标点击。

这意味着,当用户从主屏幕点击应用图标启动应用时,Intent 应该包含 CATEGORY_LAUNCHER 和 ACTION_MAIN。

finish();

如果满足上述条件(即当前 Activity 不是根 Activity,并且它是通过点击启动图标而来),则调用 finish() 来结束当前 Activity,这会将当前 Activity 从栈中移除。

return;

调用 finish() 后,直接返回,不再执行后面的代码。

目的:

这段代码的目的通常是为了防止用户在某些情况下重复启动 MainActivity,并保持任务栈的整洁。

任务栈:每当用户打开一个应用时,Android 会为该应用创建一个任务栈(Task),栈顶是当前正在显示的 Activity。

根 Activity:任务栈的第一个 Activity 称为根 Activity,通常是应用的主界面(例如 MainActivity)。

具体场景:

假设用户从其他界面回到 MainActivity,并且 MainActivity 已经存在于栈中,但用户再次点击应用图标时,Android 会重新启动 MainActivity。这段代码的目的是避免这种情况,如果当前的 Activity 不是根 Activity,且它是通过点击启动图标来启动的(符合 CATEGORY_LAUNCHER 和 ACTION_MAIN),则调用 finish() 结束当前 Activity,防止用户再次进入 MainActivity。

相关推荐
小猫猫猫◍˃ᵕ˂◍1 小时前
备忘录模式:快速恢复原始数据
android·java·备忘录模式
CYRUS_STUDIO3 小时前
使用 AndroidNativeEmu 调用 JNI 函数
android·逆向·汇编语言
梦否3 小时前
【Android】类加载器&热修复-随记
android
徒步青云3 小时前
Java内存模型
android
今阳4 小时前
鸿蒙开发笔记-6-装饰器之@Require装饰器,@Reusable装饰器
android·app·harmonyos
-优势在我8 小时前
Android TabLayout 实现随意控制item之间的间距
android·java·ui
hedalei9 小时前
android13修改系统Launcher不跟随重力感应旋转
android·launcher
Indoraptor10 小时前
Android Fence 同步框架
android
峥嵘life10 小时前
DeepSeek本地搭建 和 Android
android
叶羽西10 小时前
Android14 Camera框架中Jpeg流buffer大小的计算
android·安卓