Thread beenden

T

tau31535

Neues Mitglied
0
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 v, MotionEvent event) {
                if ((event.getAction() == MotionEvent.ACTION_DOWN) ) {
                    up = "Start";
                    BTTH = true;
                    Log.e(TAG, up);
                    
                     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();
                     
                        
                };
 
Hi tau31535,
tau31535 schrieb:
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 ;)

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
 
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(TAG, Name);
                                    } 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();
 
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:

Ähnliche Themen

Hansimglueck0815
Antworten
0
Aufrufe
731
Hansimglueck0815
Hansimglueck0815
M
  • maksimilian
Antworten
15
Aufrufe
1.695
maksimilian
M
W
  • waltsoft
Antworten
3
Aufrufe
722
waltsoft
W
Zurück
Oben Unten