1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Thread beenden

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von tau31535, 17.11.2011.

  1. tau31535, 17.11.2011 #1
    tau31535

    tau31535 Threadstarter Junior Mitglied

    Beiträge:
    39
    Erhaltene Danke:
    0
    Registriert seit:
    14.07.2009
    Hallo zusammen,

    ich habe jetzt mein erstes eigenes BT Chat Programm Fertiggestellt.
    Ich weiss für den einen oder anderen sicherlich nicht schwer.

    Nun wollte ich unbedingt, das beim Halten eines Buttons ein Befehl in einer Schleife immer wieder bis zum loslassen übertragen wird.

    Dafür habe ich auf den Button ein OnTouchListener gelegt und in dem einen Thread ausgeführt. Der Wert BTTH wird durch den MotionEvent UP geändert sodass dann der Thread aufhört zu arbeiten.

    Jetzt meine Fragen.
    Kann oder sollte ich den Thread anders legen bzw. deklarieren.
    Kann ich den Thread beenden oder wird das von alleine erledigt.
    Sollte ich gänzlich was an der Programmierung ändern ;)

    PHP:
    Start.setOnTouchListener(new View.OnTouchListener() {
                @
    Override
                
    public boolean onTouch(View vMotionEvent event) {
                    if ((
    event.getAction() == MotionEvent.ACTION_DOWN) ) {
                        
    up "Start";
                        
    BTTH true;
                        
    Log.e(TAGup);
                        
                         new 
    Thread(new Runnable() {
                                public 
    void run() {
                                  
    methode_aufrufen();
                             }

                                public 
    void methode_aufrufen() {
                                    while (
    BTTH) {
                                        
                                        try {
                                            
    OutputStream lol btSocket.getOutputStream();
                                            
                                            
    String message "Start";
                                            
    byte[] msgBuffer message.getBytes();
                                            try {
                                                    
    lol.write(msgBuffer);
                                            } catch (
    IOException e) {
                                                
    e.printStackTrace();
                                                    
    Log.e(TAG"ON RESUME: Exception during write.");
                                            }
                                        } catch (
    IOException e1) {
                                            
    // TODO Auto-generated catch block
                                            
    e1.printStackTrace();
                                        }
                                    }
                                    
                                    
                                    
                                }}).
    start();
                         
                            
                    };
     
  2. Neeldarax, 17.11.2011 #2
    Neeldarax

    Neeldarax Erfahrener Benutzer

    Beiträge:
    170
    Erhaltene Danke:
    31
    Registriert seit:
    07.12.2010
    Hi tau31535,
    Wo soll man anfangen ^^

    Ein TouchEvent wird beim Halten bzw. leichten Bewegen mehrmals ausgelöst.
    Starten dein Thread dann auch mehrmals? Ist nicht der Sinn oder?

    OnClickEvent wird NUR beim Loslassen ausgelöst, das könnt dir hilfreich für die "stop"-Bedingung sein.

    Thread deklaration aus dem onTouch rausziehen.


    Kürzen:
    Code:
    e.printStackTrace();
    Log.e(TAG, "ON RESUME: Exception during write.");
    zu
    Code:
    Log.e(TAG, "ON RESUME: Exception during write.", e);

    Kurzzeitvariablen in Schleifen meiden.


    So das sind stichtpunktartig Ideen, die dir helfen könnten.

    regards
     
  3. tau31535, 17.11.2011 #3
    tau31535

    tau31535 Threadstarter Junior Mitglied

    Beiträge:
    39
    Erhaltene Danke:
    0
    Registriert seit:
    14.07.2009
    Danke schonmal für deine antwort.
    Der Thread wird nur einmal gestartet, da ich ich vergleiche auf MotionEvent.ACTION_DOWN bei ziehen werden andere MotionEvent's ausgelöst.
    Wenn ich natürlich loslasse und wieder Drücke ist die Bedingung ACTION_DWON wieder erfüllt und der Thread wird gestartet.

    Nur die Frage, wird der Thread selber gestoppt, weil die while Bedingung beendet ist oder wie stoppe ich Thread. bzw. wie implementiere ich das.

    Habe jetzt folgendes ergänzt

    PHP:
    Thread Threading Thread.currentThread();
    String Name Threading.getName();
    und nach dem die Schleife fertig ist

    PHP:
    Threading.stop();
    Log.e(TAG"Thread beendet");
            
    ist das richtig?

    Wenn ich im Log schaue wird THread beenden auch niedergeschrieben. Drück ich den Button erneut wird die Schleife wieder ausgeführt. Jedoch wird im Log dann Thread name immer + 1 hochgezählt

    PHP:
    new Thread(new Runnable() {
                                public 
    void run() {
                                    
                                    
                                  
    methode_aufrufen();
                             }

                                public 
    void methode_aufrufen() {
                                
    Thread    Threading Thread.currentThread();
                                    
    String Name Threading.getName();
                                    while (
    BTTH) {
                                        
                                        
    //do what you want to do before sleeping
                                          
    try {
                                             
    Thread.sleep(1000);
                                             
    Log.e(TAGName);
                                        } catch (
    InterruptedException e) {}
                                        
                                        try {
                                            
    OutputStream lol btSocket.getOutputStream();
                                            
                                            
    String message "LOL";
                                            
                                            
    byte[] msgBuffer message.getBytes();
                                            try {
                                                    
    lol.write(msgBuffer);
                                            } catch (
    IOException e) {
                                                
    e.printStackTrace();
                                                    
    Log.e(TAG"ON RESUME: Exception during write.");
                                            }
                                        } catch (
    IOException e1) {
                                            
    // TODO Auto-generated catch block
                                            
    e1.printStackTrace();
                                        }
                                    }
                                    
    Threading.stop();
                                    
    Log.e(TAG"Thread beendet");
                                    
                                                        
                                }}).
    start();
                         
     
  4. DieGoldeneMitte, 17.11.2011 #4
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Die Methode Tread.stop() ist eine Antiquität und sollte NIEMALS benutzt werden.
    Es ist in Java nicht vorgesehen, Threads von außen anzuhalten.

    Das mit dem BTTH ist im Prinzip der richtige Weg
     
    Zuletzt bearbeitet: 17.11.2011

Diese Seite empfehlen