您的当前位置:首页Android之 部分系统安装器bug导致应用重启解决方法

Android之 部分系统安装器bug导致应用重启解决方法

2024-12-14 来源:哗拓教育

当第一次应用安装的时候,选择打开的时候,当我们进入应用后,按住Home键切回桌面,然后才重新进入应用,会发现应用会重新启动。

初次判断是部分手机系统安装器的bug,即使我们在AndroidManifest的配置设置了启动页模式,如下:

  <activity
            android:name=".ui.splashActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:launchMode="singleTop"
            android:screenOrientation="portrait"
            android:theme="@style/myTheme"
            android:windowSoftInputMode="adjustPan">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

但是通过安装器完成安装后,点击“打开”后启动的应用,启动页Activity不会持有AndroidManifest配置的action和category。目前还找不到比较权威性的解释。

目前解决方法

解决方法思路很简单:首先在首次启动的activity(设置action时MAIN的activity),在创建前(oncreate())先判断当前的activity,intent是否持有配置的action和category,没有的话就finish后在startActivity同个activity实例出来。如下代码:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
      //FLAG_ACTIVITY_RESET_TASK_IF_NEEDED 可以表示是否从桌面进来
        if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED) == 0) {
          // 如果没有检测到配置的action和category, finsh -> start
            finish();
          
            Intent mIntent = new Intent(this, splashActivity.class);
            mIntent.setAction(Intent.ACTION_MAIN);
            mIntent.addCategory(Intent.CATEGORY_LAUNCHER);
            mIntent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
            mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(mIntent);
        }
        super.onCreate(savedInstanceState);
    }

目前这种方法可以解决,如果有读者大神知道什么原因导致的,欢迎联系交流哈~

傻小孩b mark共勉,写给在成长路上奋斗的你

显示全文