应用程序在runOnUiThread中执行片段事务时挂起

时间:2016-09-20 06:28:29

标签: android android-fragments android-runonuithread

在我的应用中,我正在线程中进行网络操作。在网络操作的结果中,我显示了一个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);
        }
    }

2 个答案:

答案 0 :(得分:2)

在应用程序中启用严格模式并检查主线程被阻止的位置。

答案 1 :(得分:0)

试试这个:getActivity()。runOnUiThread(new Runnable ......

因为:

1)对runOnUiThread的调用中隐含的是指AsyncTask,而不是你的片段。

2)片段没有runOnUiThread

请注意,如果您已经在主线程上,则只执行Runnable,如果您不在主线程上,则使用Handler。如果你不想担心这个问题的背景,你可以在你的片段中实现一个处理程序,它实际上很容易:

http://developer.android.com/reference/android/os/Handler.html