Android日常问题整理

Posted on 2018-12-06 20:32  老大闯天下  阅读(82)  评论(0编辑  收藏  举报

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()。