1. Mitglieder surfen ohne Werbung auf Android-Hilfe.de! ✔ Jetzt kostenlos Mitglied in unserer Community werden.
Schlagworte:
  1. JoEntwickler, 29.05.2018 #1
    JoEntwickler

    JoEntwickler Threadstarter Android-Hilfe.de Mitglied

    Hallo,

    ich möchte für die Erstellung einer PDF einen Hintergrundprozess machen.
    Der wird aber beim Testen trotzdem im Vordergrund ausgeführt.

    Handler handler = new Handler();
    handler.post(new Runnable() {
    @override
    public void run() {
    //Code
    }
    });

    Wie genau funktioniert das in Android?

    Liebe Grüße
     
  2. 123thomas, 29.05.2018 #2
    123thomas

    123thomas Android-Hilfe.de Mitglied

    Hallo,

    du musst das ganze in einem Thread auslagern. Für keinere Arbeiten kannst du auch den AsyncTask benutzen.
    In deinem Fall würde ich den Asynctask nutzen.
     
  3. deek, 29.05.2018 #3
    deek

    deek Android-Experte

    Der Handler in Android ist immer ein Handler für den aktuellen Thread, wenn du keinen explizit angibst.
    d.h. du bist hier im MainThread.
    Wenn du einen Handler für einen weiteren Thread haben willst, musst du erst einen HandlerThread erstellen und den dem Handler mitgeben. (irgendwas mit dem Looper ist da noch)
     
  4. JoEntwickler, 29.05.2018 #4
    JoEntwickler

    JoEntwickler Threadstarter Android-Hilfe.de Mitglied

    Ich habs jetzt mal mit einem ganz normalen Thread wie man das in Java so macht versucht.
    Aber der die App friert dann wärend der Bearbeitung ein. Gibts was das ich da noch vergessen habe?

    Thread thread = new Thread(new Runnable() {
    @override
    public void run() {
    //Code
    }
    });
    thread.run();
     
  5. deek, 29.05.2018 #5
    deek

    deek Android-Experte

    thread.start() statt thread.run()
     
  6. JoEntwickler, 31.05.2018 #6
    JoEntwickler

    JoEntwickler Threadstarter Android-Hilfe.de Mitglied

    Oh ja stimmt. Sorry habs übersehen.

    Jetzt hab ich aber noch das Problem das er bei einem Toast der nach meiner Bearbeitung, also auch in dem Thread angezeigt werden soll. Da wirft er immer eine Exception.

    java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
    at android.os.Handler.<init>(Handler.java:200)
    at android.os.Handler.<init>(Handler.java:114)
    at android.widget.Toast$TN$2.<init>(Toast.java:336)
    at android.widget.Toast$TN.<init>(Toast.java:336)
    at android.widget.Toast.<init>(Toast.java:103)
    at android.widget.Toast.makeText(Toast.java:256)
    at android.widget.Toast.makeText(Toast.java:283)
     
  7. 123thomas, 31.05.2018 #7
    123thomas

    123thomas Android-Hilfe.de Mitglied

    Hallo,

    das kommt daher, dass du von einem anderen Thread als dem Main Thread auf die GUI zugreifst. Daher musst du dann mit dem Looper arbeiten.

    Ich meine das es einfacher ist mit einem Async Task und der GUI zu kommunizieren, aber das kann dir besser jemand anderes beantworten.

    Gruß
     
  8. JoEntwickler, 31.05.2018 #8
    JoEntwickler

    JoEntwickler Threadstarter Android-Hilfe.de Mitglied

    Ok hab auf die Schnelle mal gegoogelt und was gebastelt.
    Aber es passiert nichts.

    Thread thread = new Thread(new Runnable() {
    public Handler mHandler;

    @override
    public void run() {
    Looper.prepare();

    mHandler = new Handler() {
    @override
    public void handleMessage(Message msg) {
    //Code
    }
    };

    Looper.loop();
    }
    });
    thread.start();
     
  9. jogimuc, 01.06.2018 #9
    jogimuc

    jogimuc Erfahrener Benutzer

    Hallo
    mache es so.

    Thread thread = new Thread(new Runnable() {
    @override
    public void run() {
    //Code


    // Ausführen im UI mit runOnUiThread
    runOnUiThread(new Runnable(){
    public void run() {
    // Hier der Code der im UI ausgeführt werden soll
    }
    });


    // Ausführen im UI mit Handler
    Handler handler = new Handler(Looper.getMainLooper());
    handler.post(new Runnable() {
    public void run() {
    // Hier der Code der im UI ausgeführt werden soll
    }
    });


    }
    });

    // Wichtig den Thread mit start() Starten, nicht mit run()
    thread.start();
     
    markus.tullius bedankt sich.
  10. JoEntwickler, 01.06.2018 #10
    JoEntwickler

    JoEntwickler Threadstarter Android-Hilfe.de Mitglied

    Perfekt funktioniert wie ich es mir vorgestellt hab.

    Vielen Dank für die Tipps und euch ein schönes Wochenende.
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
Bluetooth Kommunikation funktioniert ab Android 7 nicht mehr Android App Entwicklung 25.01.2018
openOptionsMenu() funktioniert nicht Android App Entwicklung 23.01.2018
[OFFEN] Webview Cache funktioniert nicht Android App Entwicklung 31.10.2017
Du betrachtest das Thema "Hintergrundprozess funktioniert nicht" im Forum "Android App Entwicklung",
  1. Android-Hilfe.de verwendet Cookies um Inhalte zu personalisieren und dir den bestmöglichen Service zu gewährleisten. Wenn du auf der Seite weitersurfst stimmst du der Cookie-Nutzung zu.  Ich stimme zu.