2016-09-21 5 views
0

Ich bin in Situationen gelandet, in denen ich die gleiche UI-Operation (sagen wir von einer Toast Nachricht) aus zwei verschiedenen Threads. Der Unterschied besteht darin, dass der erste Thread der UI-Thread für die Aktivität ist und der andere Thread ein separater Thread ist, mit dem ich einen Hintergrundprozess gestartet habe. Die Frage ist, dass es die beste Vorgehensweise ist, sicherzustellen, dass der Code zum Anzeigen der Nachricht Toast immer vom UI-Thread ausgeführt wird. Ich sehe hier zwei Möglichkeiten.Android: Best Practice, um sicherzustellen, dass eine UI-Operation auf UI-Thread ausgeführt wird

Wir haben eine Funktion, die die Testnachricht wie

private void showToast() { 
    Toast.makeText(context, message, Toast.LENGTH_LONG).show(); 
} 

Und jedes Mal, wenn wir diese Methode aufrufen, um zu zeigen, soll sichergestellt werden, dass es auf dem UI-Thread aufgerufen werden muss, für die wir verwenden können runOnUiThread() der Ort, den wir anrufen showToast(). Die andere Option besteht darin, sicherzustellen, dass der Code, der Toast anzeigt, auf der UI thread innerhalb der Methode showToast() selbst ausgeführt wird. Soetwas wie das:

private void showToast() { 
     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       Toast.makeText(context, message, Toast.LENGTH_LONG).show(); 
      } 
     }); 
    } 

Welches ist die bevorzugte Praxis und warum?

+0

Warum nicht die zweite Option verwenden? –

+0

Mögliche Duplikate von [Update der Android-Thread-Elemente - Best Practice?] (Http://stackoverflow.com/questions/21635062/android-updating-ui-thread-elements-best-practice) –

Antwort

1

Verwenden Sie die zweite Option. Wenn Sie sich bereits im UI-Thread befinden, wird die Aktion nur im selben Kontext ausgeführt. Reference

0

Verwenden Sie die zweite Option ist ein nützliches, aber die Android-Muster empfehlen einen AsyncTask Thread zu verwenden, wenn Sie mit Threads arbeiten, weil Sie 3 verschiedene Möglichkeiten haben UI-Thread zu verwenden, (onPreExecute, onProgressUpdates und onPostExecute).

https://developer.android.com/reference/android/os/AsyncTask.html

Verwandte Themen