我有一段简单的代码:

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

    //...

    NetworkWorker networkFragment = NetworkWorker.createInstance(null);
    fragmentTransaction.add(networkFragment, NETWORK);

    //...

    fragmentTransaction.commit();

    networkFragment.startURLRequest("test");
}


当我在getActivity()例程中调用startURLRequest()时崩溃了。

startURLRequest()调用移至onStart()后,它就可以正常工作。

所以我用谷歌搜索了一下:


  调用commit()不会立即执行事务。而是将其安排为在活动的UI线程(“主”线程)上运行后立即运行。但是,如有必要,您可以从UI线程调用executePendingTransactions()以立即执行commit()提交的事务。除非交易是其他线程中作业的依赖项,否则通常无需这样做。
  [AndDev guide]


现在,我的问题是...是否真的建议使用此executePendingTransactions(),否则是否会有陷阱?还有另一种确定交易是否完成的方法吗?仅仅猜测它们可能在Activity的下一个例程中完成似乎并不令人满意。

亲切的问候,
海蜇

最佳答案

也许您在想这是错误的方式。与其在活动的片段上调用startURLRequest,不如在片段的startURLRequestonAttach等方法中调用onCreate,因为在这些时候,您知道片段已附加到活动上,并且getActivity()将成功。

在我看来,该片段应该确定何时调用startURLRequest而不是活动。否则,从您的活动中必须进行测试以确保该片段与片段相关联。

07-27 17:45