目录

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。

本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
每次的天空4 小时前
Android学习总结之算法篇五(字符串)
android·学习·算法
Gracker5 小时前
Android Weekly #202513
android
张拭心7 小时前
工作九年程序员的三月小结
android·前端
每次的天空7 小时前
Flutter学习总结之Android渲染对比
android·学习·flutter
鸿蒙布道师9 小时前
鸿蒙NEXT开发土司工具类(ArkTs)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
智想天开10 小时前
11.使用依赖注入容器实现松耦合
android
yunteng52111 小时前
音视频(四)android编译
android·ffmpeg·音视频·x264·x265
tangweiguo0305198711 小时前
(kotlin) Android 13 高版本 图片选择、显示与裁剪功能实现
android·开发语言·kotlin
匹马夕阳11 小时前
(一)前端程序员转安卓开发分析和规划建议
android·前端
Kika写代码11 小时前
【Android】UI开发:XML布局与Jetpack Compose的全面对比指南
android·xml·ui