当第一次应用安装的时候,选择打开的时候,当我们进入应用后,按住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共勉,写给在成长路上奋斗的你