2017-12-22 7 views
0

Meine Android-Anwendung hat zwei Aktivitäten, wenn ich die Schaltfläche auf der Hauptaktivität zu drücken, um seine 2. Aktivität und lesen Sie die seriellen Bluetooth-Daten Werte mit folgender Thread-Funktion. Ich möchte den Thread stoppen, wenn ich die Zurück-Taste drücke. oder wenn Sie die On-Click-Taste der 2. Aktivität drücken. Bitte hilf mir, dass ich neu bei Android bin.Ich möchte meinen Thread stoppen, wenn Sie die Zurück-Taste drücken und auf klicken klicken (Android Studio)

mein Thread-Funktion

void beginListenForData() 
{ 
    final Handler handler = new Handler(); 

    stopThread = false; 
    buffer = new byte[1024]; 
    Thread thread = new Thread(new Runnable() 
    { 
     public void run() 
     { 
      while(!Thread.currentThread().isInterrupted() && !stopThread) 
      { 

       try 
       { 
        int byteCount = inputStream1.available(); 
        if(byteCount > 0) 
        { 
         byte[] rawBytes = new byte[byteCount]; 
         inputStream1.read(rawBytes); 
         final String string=new String(rawBytes,"UTF-8"); 

         handler.post(new Runnable() { 
          public void run() 
          { 


           recDataString.append(string);          //keep appending to string until ~ 

           //keep appending to string until ~ 
           int endOfLineIndex = recDataString.indexOf("~");     // determine the end-of-line 
           if (endOfLineIndex > 0) {           // make sure there data before ~ 
            //     String dataInPrint = string.substring(0, endOfLineIndex); // extract string 


            if (recDataString.charAt(0) == '#')        //if it starts with # we know it is what we are looking for 
            { 

             String sensor0 = recDataString.substring(1, 4);    //get sensor value from string between indices 1-5 
             String sensor1 = recDataString.substring(5,9);   //same again... 




              stringToFloat1 = Float.parseFloat(sensor0); 
              stringToFloat2 = Float.parseFloat(sensor1); 

              floatToInt1 = (int)stringToFloat1 ; 
              floatToInt2 = (int)stringToFloat2; 
             if ((floatToInt1 != lastFloatToInt1) ||(floatToInt2 != lastFloatToInt2)){ 

              Log.d("hell=" , "ohhhhhhhhhhhhhhhh"); 
              movieMethod(); 
             } 

             lastFloatToInt1 = floatToInt1 ; 
             lastFloatToInt2 = floatToInt2 ; 
            } 
            recDataString.delete(0, recDataString.length());     //clear all string data 
           } 
          } 
         }); 

        } 
       } 
       catch (IOException ex) 
       { 
        stopThread = true; 
       } 
      } 
     } 
    }); 
    thread.start(); 
} 
+1

Aufschalten 'OnBackButtonPressed()' im Inneren, dass der Faden nicht mehr, wenn Thread –

Antwort

0

Wie ich verstehe, wissen Sie, wie Thread zu stoppen, aber Sie wissen nicht, wo Sie die Flagge des stopThread setzen? dann unten sind die Punkte.

public class SecondActivity extends Activity { 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.second_activity); 
     Button myButton = findViewById(R.id.my_button_id_from_xml); 
     myButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       stopThread = true; 
      } 
     }); 
    } 

    //Back button listener 
    @Override 
    public void onBackPressed() { 
     stopThread = true; 
     super.onBackPressed(); 
    } 

} 
+0

danken läuft u sehr viel. Das ist Arbeit für mich –

0

verwenden:

Button button; 
@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.second_activity); 
     button = findViewById(R.id.button); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       yourThread.interrupt(); 
      } 
     }); 
    } 

    //Back button listener 
    @Override 
    public void onBackPressed() { 
     yourThread.interrupt(); 
     super.onBackPressed(); 
    } 

} 
0

können Sie Aktivität verwenden außer Kraft gesetzt Method-:

@Override 
    public void onBackPressed() { 
     super.onBackPressed(); 
     //Do your stuff here 
    } 
Verwandte Themen