1.系统语言切换后Activity布局刷新问题
4.2增加了一个layoutDirection属性,当改变语言设置后,该属性也会成newConfig中的一个mask位。所以ActivityManagerService(实际在ActivityStack)在决定是否重启Activity的时候总是判断为重启。 需要在android:configChanges 中同时添加locale和layoutDirection。
2.Fragment加载与弹出
进栈
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.add(R.id.fragment_name, fragment);
transaction.addToBackStack(tag);//给加入的fragment加个TAG
transaction.commitAllowingStateLoss();
出栈
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.remove(fragment);
fragmentTransaction.commitAllowingStateLoss();
fragmentManager.popBackStackImmediate(tag, 1);//删除加了TAG的Fragment,只用remove是有问题的
tag可以为null或者相对应的tag,flags只有0和1(POP_BACK_STACK_INCLUSIVE)两种情况
如果tag为null,flags为0时,弹出回退栈中最上层的那个fragment。
如果tag为null ,flags为1时,弹出回退栈中所有fragment。
如果tag不为null,那就会找到这个tag所对应的fragment,
flags为0时,弹出该fragment以上的Fragment,
flags为1时,弹出该fragment(包括该fragment)以上的fragment。
3.Android工程分多进程启动多Activity与多Service,Application会多次启动,在每个进程中都会运行一次。
private boolean isMain() {
int pid = android.os.Process.myPid();
String processName = "";
ActivityManager mActivityManager = (ActivityManager) this
.getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningAppProcessInfo appProcess
: mActivityManager.getRunningAppProcesses()) {
if (appProcess.pid == pid) {
processName = appProcess.processName;
break;
}
}
String packageName = this.getPackageName();
if (processName.equals(packageName)) {
return true;
}
return false;
}
4.Android工程分多进程启动多Activity与多Service。在android设备中强制停止app,service也被销毁,走onDestroy()。