Wie Haupt-Thread aus dem sekundären Thread in Android anrufen?Anruf Haupt-Thread aus dem sekundären Thread in Android
Antwort
Der einfachste Weg ist runOnUiThread (...) von dem Thread auch
activity.runOnUiThread(new Runnable() {
public void run() {
... do your GUI stuff
}
});
Meine Empfehlung, Threads im selben Prozess zu kommunizieren, ist das Senden von Nachrichten zwischen diesen Threads. Es ist sehr leicht, diese Situation zu bewältigen Handlers mit:
http://developer.android.com/reference/android/os/Handler.html
Anwendungsbeispiel von Android-Dokumentation, um teure Arbeit aus dem UI-Thread Handhabung:
public class MyActivity extends Activity {
[ . . . ]
// Need handler for callbacks to the UI thread
final Handler mHandler = new Handler();
// Create runnable for posting
final Runnable mUpdateResults = new Runnable() {
public void run() {
updateResultsInUi();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
[ . . . ]
}
protected void startLongRunningOperation() {
// Fire off a thread to do some work that we shouldn't do directly in the UI thread
Thread t = new Thread() {
public void run() {
mResults = doSomethingExpensive();
mHandler.post(mUpdateResults);
}
};
t.start();
}
private void updateResultsInUi() {
// Back in the UI thread -- update our UI elements based on the data in mResults
[ . . . ]
}
}
Danke! Klappt wunderbar!! : D –
Sie werden eine Notwendigkeit Handler
, die die Informationen an den Hauptthread zurückgibt.
zu nennen, ist es gut, sich daran zu erinnern, dass, wenn Sie Ihren sekundären Thread durch eine AsyncTask bekommen, haben Sie die Möglichkeit onProgressUpdate() anrufen , onPostExecute(), usw., um am Haupt-Thread zu arbeiten.
Beispielcode HandlerThread
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Handler responseHandler = new Handler(Looper.getMainLooper()){
@Override
public void handleMessage(Message msg) {
//txtView.setText((String) msg.obj);
Toast.makeText(MainActivity.this,
"Result from UIHandlerThread:"+(int)msg.obj,
Toast.LENGTH_LONG)
.show();
}
};
HandlerThread handlerThread = new HandlerThread("UIHandlerThread"){
public void run(){
/* Add your business logic to pupulate attributes in Message
in place of sending Integer 5 as in example code */
Integer a = 5;
Message msg = new Message();
msg.obj = a;
responseHandler.sendMessage(msg);
System.out.println(a);
}
};
handlerThread.start();
}
}
Erklärung mit:
In obigem Beispiel
HandlerThread
PostenMessage
aufHandler
von UI-Thread, der mitLooper
von UI-Thread initialisiert wurde.final Handler responseHandler = new Handler(Looper.getMainLooper())
responseHandler.sendMessage(msg);
sendetMessage
vonHandlerThread
zu UI-ThreadHandler
.handleMessage
ProzesseMessage
empfangen amMessageQueue
und zeigt einen Toast auf UI-Thread.
- 1. Ausführen von Code auf dem Hauptthread von einem sekundären Thread?
- 2. Beenden eines sekundären Threads aus dem Haupt-Thread (Kakao)
- 3. Für pthread, wie Kind Thread aus dem Hauptthread zu töten
- 4. Std :: Thread erkennen Hauptthread
- 5. Wert aus Thread in Python zurückgeben, ohne Hauptthread zu blockieren
- 6. Android, Handler läuft im Hauptthread oder in einem anderen Thread?
- 7. Erkennen, wenn Sie in/aus dem Hauptthread in Xamarin.iOS sind
- 8. Führen Sie Code im Hauptthread von einem Worker-Thread aus
- 9. Führt eine Methode im Hauptthread aus dem Ereignishandler aus
- 10. Setzen Sie den Cache auf Okhttp3 aus dem Hauptthread
- 11. Wie aus dem blockierenden TcpListener :: Anruf annehmen?
- 12. AscyncTask - Nicht auf dem Hauptthread
- 13. Vollbildmodus auf dem sekundären Monitor
- 14. Unbehandelte Ausnahmen in einem Thread im Hauptthread auslösen?
- 15. PyDev aus sekundären Quellordnern importieren
- 16. Ist der Hauptthread der gleiche wie der UI-Thread?
- 17. Erstellt performSelectorInBackground einen neuen Thread für jeden Anruf?
- 18. In RxJava, kann gezippte Observable zum Hauptthread zurückkehren, wenn es auf dem anderen Thread abonniert hat?
- 19. Wie poste ich Code, der auf dem Android-Hauptthread von einem separaten Thread in C++ ausgeführt werden soll?
- 20. Anruf Parameterized Methode in thread mit C#
- 21. Android Sip Anwendung Anruf aus Kontakte/Telefonbuch
- 22. iphone - ist es in Ordnung, usleep auf einem sekundären Thread auf Grand Central Dispatch zu verwenden?
- 23. Android - Wie sieht ein entlassener Anruf aus?
- 24. Android: Anruf vom Dienst
- 25. Realm-Schreibvorgänge blockieren Hauptthread
- 26. Android, Volley Anfrage, die Antwort blockiert Hauptthread
- 27. Wie PJSUA Anruf in android
- 28. Qt C++ emittieren aus dem Thread, in den Schlitz GUI
- 29. Android Studio-Methode gettext muss aus dem ui Thread aufgerufen werden derzeit abgeleiteten Thread ist Worker
- 30. NSThread sleepfortimeiinterval Blöcke Hauptthread
Bitte erläutern Sie, was Sie zu tun versuchen. –