安装器打开APP后,点击home键返回桌面。再点击桌面图标打开APP后是重新启动。

本文分析了一个APP在通过安装器启动后使用Home键返回并再次点击图标启动时会重新加载闪屏页的问题。详细探讨了安装器启动与桌面图标启动的区别,并提供了一种有效的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在工作中遇到一个反馈的问题,就是如标题所言,更新或者新安装了app后,发现点击home键,再打开的时候,重新启动了。记录一下该问题的原因和解决办法。

问题出现的操作

  1. 安装APP成功后,在安装器中点击“打开”,APP启动,先进入闪屏页,然后才进入首页;
  2. 按下Home键,回到桌面;
  3. 再点击APP的图标,APP并不是打开之前已经加载完的首页,而是重新进入闪屏页,然后再进入首页

这样操作,就会出现这个问题。正常的点击桌面图标打开,home键回到桌面,再点击app图标,是不会出现这个问题的,包括直接run到测试机上,也不会出现。

出现问题的原因

网上查找了资料,原因是

安装器启动app和点击图标启动APP是有区别的。

从安装界面启动activity和桌面点击图标启动activity时所使用的Intent是不一样的。从安装界面启动activity是会调用setpackage方法,从桌面启动不会。

安装器打开APP的代码:

@Override
public Intent getLaunchIntentForPackage(String packageName) {
    // First see if the package has an INFO activity; the existence of
    // such an activity is implied to be the desired front-door for the
    // overall package (such as if it has multiple launcher entries).
    Intent intentToResolve = new Intent(Intent.ACTION_MAIN);
    intentToResolve.addCategory(Intent.CATEGORY_INFO);
    intentToResolve.setPackage(packageName);
    List<ResolveInfo> ris = queryIntentActivities(intentToResolve, 0);
    // Otherwise, try to find a main launcher activity.
    if (ris == null || ris.size() <= 0) {
        // reuse the intent instance
        intentToResolve.removeCategory(Intent.CATEGORY_INFO);
        intentToResolve.addCategory(Intent.CATEGORY_LAUNCHER);
        intentToResolve.setPackage(packageName);
        ris = queryIntentActivities(intentToResolve, 0);
    }
    if (ris == null || ris.size() <= 0) {
        return null;
    }
    Intent intent = new Intent(intentToResolve);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.setClassName(ris.get(0).activityInfo.packageName,
            ris.get(0).activityInfo.name);
    return intent;
}

桌面打开APP代码:

public static Intent makeLaunchIntent(LauncherActivityInfo info) {
    return new Intent(Intent.ACTION_MAIN)
        .addCategory(Intent.CATEGORY_LAUNCHER)
        .setComponent(info.getComponentName())
        .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
}

参考1

Android Bug分析系列:第三方平台安装app启动后,home键回到桌面后点击app启动时会再次启动入口类bug的原因剖析 - 码农叔叔 - 博客园

参考2

Android开发之安装器中打开APP,Home键进入后台重新返回前台时会重新启动的Bug_码砖咋说的博客-CSDN博客

解决办法:

在启动页onCreate里添加下面代码。

if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
    finish();
    return;
}

同时,在注册文件中,启动页的launchMode要去掉。否则不起作用。

网上也有别的解决办法,但是我测试过后,这个办法是比较好用的。

<think>嗯,用户问的是如何在安卓设备的桌面上隐藏或屏蔽某个应用的图标。我需要根据提供的引用内容来回答这个问题。首先,看看引用里提到的内容有没有相关的信息。 引用3提到:“先将所有gaia界面写出来,并hide,留app窗口,最先是homescreen 填充在里面,所有的应用窗口都放这里展示。” 这里可能涉及到隐藏界面或窗口的方法,可能和应用图标隐藏有关。不过具体怎么操作呢? 然后引用5提到在WorkspaceLayoutManager.java中的addInScreen方法,以及设置长按事件ItemLongClickListener。可能是在Launcher3的代码中,通过修改布局或者监听长按事件来控制图标的显示。但用户可能不会直接修改系统代码,所以需要找到用户可操作的方法。 另外,引用1中的LinearLayout可能涉及布局结构,但用户可能需要的是设置应用组件是否可见。通常安卓中隐藏应用图标可以通过禁用组件或者修改启动器设置。例如,使用PackageManager来禁用组件,或者在启动器设置中隐藏。 根据我的知识,常规方法包括使用应用抽屉设置隐藏、使用第三方启动器、或者通过ADB命令禁用应用组件。需要检查引用中有没有提到这些方法。引用5提到长按事件的处理,可能某些启动器允许长按图标隐藏,但原生安卓可能不支持。 综合引用内容和常规方法,可能需要指导用户使用PackageManager或者第三方启动器。如果用户有系统权限,可以通过修改Launcher3的代码,但普通用户可能无法做到。所以回答应该包含常见方法,并引用相关的内容作为支持。</think>### 如何在安卓设备上隐藏应用图标? #### 方法一:通过**应用组件禁用**(系统级) 1. **使用`PackageManager`隐藏图标** 在AndroidManifest.xml中为目标应用的主Activity添加`android:enabled="false"`属性,或通过代码动态禁用组件: ```java PackageManager pm = getPackageManager(); ComponentName component = new ComponentName("com.example.app", "com.example.app.MainActivity"); pm.setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); ``` 此方法需要系统权限或ADB调试权限,适用于开发者调试场景[^3][^5]。 #### 方法二:**修改Launcher3源码**(需系统权限) 1. **在`WorkspaceLayoutManager.java`中过滤应用** 修改`addInScreen()`方法,在绑定布局时跳过特定应用: ```java if ("com.example.app".equals(child.getTag())) { child.setVisibility(View.GONE); // 直接隐藏图标 return; } ``` 此方法需重新编译系统镜像,适用于ROM定制开发者[^2]。 #### 方法三:**使用第三方启动器** 1. **Nova Launcher/Action Launcher** - 长按桌面 → 进入设置 → 应用抽屉 → 隐藏应用 - 支持图形化操作,无需代码或权限,适用于普通用户。 #### 方法四:**ADB命令临时隐藏** ```bash adb shell pm disable-user --user 0 com.example.app ``` 此命令会禁用应用组件,但恢复需重新启用(`adb shell pm enable com.example.app`)[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值