登录

去注册

登录

注册

去登录

注册

解锁回答区域

  • 扫码关注公众号
  • 发送“我爱安卓

若你登陆,将永久解锁;
若未登录,仅本机解锁。

解锁回答区域

每日一问 今天考察下 Fragment 相关两个不常见 API

xiaoyang   2020-03-19 00:55   收藏

第一个 API 是:

FragmentManager.executePendingTransactions()

第二个 API 是:

FragmentTransaction.commitNow();

大家都清楚 Fragment很多 API 都是“异步”的,即并非是立即生效的.

那么这两个 API 有点“同步”的感觉。

请问:

  1. 这两个 API 有何作用?
  2. 这两个 API 有啥区别?
  3. 这两个 API 有什么使用场景么?

一些提示,两个 API 的一个使用场景。

你在 LifeCycle 的源码中可以看到:

public class ReportFragment extends Fragment {
    private static final String REPORT_FRAGMENT_TAG = "androidx.lifecycle"
            + ".LifecycleDispatcher.report_fragment_tag";

    public static void injectIfNeededIn(Activity activity) {
        // ProcessLifecycleOwner should always correctly work and some activities may not extend
        // FragmentActivity from support lib, so we use framework fragments for activities
        android.app.FragmentManager manager = activity.getFragmentManager();
        if (manager.findFragmentByTag(REPORT_FRAGMENT_TAG) == null) {
            manager.beginTransaction().add(new ReportFragment(), REPORT_FRAGMENT_TAG).commit();
            // Hopefully, we are the first to make a transaction.
            manager.executePendingTransactions();
        }
    }

你在 RxPermission 可以看到以下使用:

rivate RxPermissionsFragment getRxPermissionsFragment(@NonNull final FragmentManager fragmentManager) {
        RxPermissionsFragment rxPermissionsFragment = findRxPermissionsFragment(fragmentManager);
        boolean isNewInstance = rxPermissionsFragment == null;
        if (isNewInstance) {
            rxPermissionsFragment = new RxPermissionsFragment();
            fragmentManager
                    .beginTransaction()
                    .add(rxPermissionsFragment, TAG)
                    .commitNow();
        }
        return rxPermissionsFragment;
    }

删除留言

确认删除留言,会导致相关评论丢失?

取消 确定