Android开发之安装器中打开APP,Home键进入后台重新返回前台时会重新启动的Bug

1、问题

第一种操作:

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

第二种操作:

  1. 安装APP成功后,关闭安装器,回到桌面,点击APP的图片,APP启动,先进入闪屏页,然后才进入首页;
  2. 按下Home键,回到桌面;
  3. 再点击APP的图标,APP直接打开之前已经加载好的首页

2、解决方案

我的方案

网友方案

原因探究

安装器中打开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;
}

从代码中可以看到,Installer启动只设置了Intent.FLAG_ ACTIVITY NEW TASK;

桌面打开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);
}

Launcher中是有设置FLAG_ ACTIVITY_ RESET_ TASK_ IF_ NEEDED和FLAG_ ACTIVITY_ NEW_ TASK;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值