2016-09-20 63 views
-1

在我的應用程序中,我正在一個線程中執行網絡操作。在網絡操作的結果中,我使用runOnUiThread()方法顯示吐司並替換片段。但片段被替換後,應用程序被掛起。應用程序掛起時,在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

你可以使用的AsyncTask爲您的網絡操作。 –

+0

它告訴你什麼在LogCat?該應用程序掛了多長時間? – Sufian

+0

這個問題在任何情況下都是錯誤的嗎?負面印記的原因是什麼? – Madhan

回答

2

啓用嚴格的應用模式,並檢查您的主線程被阻塞。

0

試試這個:getActivity()runOnUiThread(新的Runnable ...

這是因爲:

1)在以runOnUiThread呼叫指的AsyncTask,不是你的片段隱含這一點。

2)片段沒有runOnUiThread

注意,如果你已經在主線程上,這只是執行了Runnable,並使用如果你不是在主線程處理程序。您可以在您的片段的處理程序,如果你不想擔心這樣的背景下,它實際上是很容易的:

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

相關問題