在我的应用中,我正在线程中进行网络操作。在网络操作的结果中,我显示了一个toast并使用runOnUiThread()方法替换了片段。但是,在更换片段后应用程序会被挂起。
这是我的代码
getBaseActivity().runOnUiThread(() -> {
hideProgressDialog();
showToastAlertDialog(getString(R.string.mystring));
MyFragment fragment = new MyFragment();
getBaseActivity().replaceFragment(getActivity(), fragment, false, R.id.baseFragment);
BaseActivity.java
public void replaceFragment(FragmentActivity activity, Fragment fragment, boolean addToBackStack, int baseFragment) {
try {
FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction();
ft.replace(baseFragment, fragment);
if (addToBackStack) {
ft.addToBackStack(null);
}
ft.commit();
} catch (Exception exception) {
CXLog.e(TAG, "Exception: " + exception.getLocalizedMessage(), exception);
}
}
答案 0 :(得分:2)
在应用程序中启用严格模式并检查主线程被阻止的位置。
答案 1 :(得分:0)
试试这个:getActivity()。runOnUiThread(new Runnable ......
因为:
1)对runOnUiThread的调用中隐含的是指AsyncTask,而不是你的片段。
2)片段没有runOnUiThread
请注意,如果您已经在主线程上,则只执行Runnable,如果您不在主线程上,则使用Handler。如果你不想担心这个问题的背景,你可以在你的片段中实现一个处理程序,它实际上很容易:
http://developer.android.com/reference/android/os/Handler.html