2016-09-20 1 views
-1

In meiner App mache ich eine Netzwerkoperation in einem Thread. Im Ergebnis der Netzwerkoperation zeige ich einen Toast und ersetze das Fragment mit der runOnUiThread() Methode. Aber die App wird gehängt, nachdem das Fragment ersetzt wurde.App hängt beim Ausführen von Fragment-Transaktion in runOnUiThread

Hier ist mein Code

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

Sie AsyncTask für den Netzbetrieb verwenden können. –

+0

Erzählst du etwas im LogCat? Wie lange hängt die App? – Sufian

+0

Ist diese Frage überhaupt falsch? Was ist der Grund für eine negative Note? – Madhan

Antwort

2

aktivieren Strict-Modus in der Anwendung und überprüft, wo Ihr Hauptthread blockiert zu werden.

0

starten. GetActivity() runOnUiThread (neu Runnable ...

Es ist, weil:

1) die implizite dieses in Ihrem Aufruf zum runOnUiThread zu AsyncTask bezieht, nicht Ihr Fragment.

2) Fragment nicht über runOnUiThread

Beachten Sie, dass dies führt nur die Runnable, wenn Sie bereits auf dem Hauptthread sind, und verwendet einen Handler, wenn Sie nicht auf dem Haupt-Thread sind. Sie können einen Handler in Ihrem Fragment implementieren, wenn Sie wollen über den Kontext dies keine Sorge, es ist eigentlich sehr einfach:

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

Verwandte Themen