-1

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

2 回答 2

2

在应用程序中启用严格模式并检查您的主线程在哪里被阻塞。

于 2016-09-20T06:32:31.860 回答
0

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

这是因为:

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

2)片段没有runOnUiThread

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

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

于 2016-09-21T04:39:41.200 回答