Android funktioniert im Prinzip auf zwei Gewindetypen nämlich UI-Thread und Hintergrund-Thread. Laut Android-Dokumentation -
Zugriff auf das Android-UI-Toolkit von außerhalb des UI-Threads, um dieses Problem zu beheben, bietet Android mehrere Möglichkeiten zum Zugriff auf den UI-Thread von anderen Threads. Hier ist eine Liste von Methoden, die helfen können:
Jetzt gibt es verschiedene Methoden, um dieses Problem zu lösen. Ich werde sie durch Codebeispiel erklären
runOnUiThread
new Thread()
{
public void run()
{
myactivity.this.runOnUiThread(new runnable()
{
public void run()
{
//Do your UI operations like dialog opening or Toast here
}
});
}
}.start();
LOOPER
Klasse verwendet, um eine Nachrichtenschleife für einen Thread auszuführen. Threads sind standardmäßig nicht mit einer Nachrichtenschleife verknüpft. Um einen zu erstellen, rufen Sie prepare() in dem Thread auf, der die Schleife ausführen soll, und dann loop(), um Nachrichten verarbeiten zu lassen, bis die Schleife gestoppt wird.
class LooperThread extends Thread {
public Handler mHandler;
public void run() {
Looper.prepare();
mHandler = new Handler() {
public void handleMessage(Message msg) {
// process incoming messages here
}
};
Looper.loop();
}
AsyncTask
AsyncTask ermöglicht asynchrone Arbeiten an der Benutzeroberfläche auszuführen. Er führt die Blockierungsvorgänge in einem Worker-Thread aus und veröffentlicht die Ergebnisse dann im UI-Thread, ohne dass Sie Threads und/oder Handler selbst behandeln müssen.
public void onClick(View v) {
new CustomTask().execute((Void[])null);
}
private class CustomTask extends AsyncTask<Void, Void, Void> {
protected Void doInBackground(Void... param) {
//Do some work
return null;
}
protected void onPostExecute(Void param) {
//Print Toast or open dialog
}
}
Handler
Ein Handler ermöglicht es Ihnen, und Nachrichten- und Runnable Objekte Prozess senden mit einem Thread des Message verbunden.
Message msg = new Message();
new Thread()
{
public void run()
{
msg.arg1=1;
handler.sendMessage(msg);
}
}.start();
Handler handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
if(msg.arg1==1)
{
//Print Toast or open dialog
}
return false;
}
});
http: // stackoverflow.com/questions/4208730/how-to-detect-Benutzer-Inaktivität-in-Android – Amar
Und bei öffentlichen öffentlichen void inactivitydetected() Ich verwendete Toast-Funktion – Amar