我有一段简单的代码:
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
,不如在片段的startURLRequest
,onAttach
等方法中调用onCreate
,因为在这些时候,您知道片段已附加到活动上,并且getActivity()将成功。
在我看来,该片段应该确定何时调用startURLRequest
而不是活动。否则,从您的活动中必须进行测试以确保该片段与片段相关联。