1.关于Activity的执行startActivityForResult的时候onActivityResult提前执行(在finish之前执行)
例子,有两个Activity ,A是启动Activity,B是目标Activity
如果B Activity的的启动模式
android:launchMode="singleTask"
则某些手机(4.4的华为和小米手机遇到的)的onActivityResult会提前执行,导致A收不到回调。
解决办法,将B Activity的启动模式改为
android:launchMode="standard"
2.关于桌面上的app点击提示未安装该应用的问题
原因:android:exported 这个属性
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:launchMode="singleTop"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
解决办法
android:exported="false" 去掉即可,桌面启动页不能加该属性
3. Activity在xml的三个常用配置
configChanges
android:configChanges="orientation|keyboardHidden|screenSize"
设置该属性,可以使得在屏幕方向变化和键盘显隐时,不会再重建Activity,其中screenSize是在4.0必须加上的
(会回调onConfigurationChanged方法)
不设置该属性,则会发生上述两个变化时,重建Activity
windowSoftInputMode
android:windowSoftInputMode="stateHidden|adjustResize"
windowSoftInputMode表示软键盘的弹出方式
stateHidden:用户导航(navigate)到你的Activity的时候,隐藏软键盘
adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间
adjustPan:adjustResize失效时,调用这个可能会有用
screenOrientation
android:screenOrientation="portrait"
手机屏幕的方向,一般我们都固定为竖直方向
4. singleTask问题
当Activity被设以singleTop启动,当需要再次响应此Activity启动需求时,会复用栈顶的已有Activity,还会调用onNewIntent方法。
并且此时的生命周期很奇怪 onNewIntent->onResume->onPause->onResume