2017-12-22 12 views
0

私のアンドロイドアプリケーションには2つのアクティビティがあります。メインアクティビティのクリックボタンを押して2番目のアクティビティに移動し、次のスレッド関数を使用して値を返します。私はバックボタンを押すとスレッドを止めたい。 2回目のアクティビティでクリック時のボタンを押したときに表示されます。私はアンドロイドに新しい人を助けてください。戻るボタンを押してボタンをクリックするとスレッドを止めたい(Androidスタジオ)

私のスレッド関数

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

オーバーライド '()スレッドが –

答えて

0

私が理解として、あなたはスレッドを停止する方法を知っていますが、stopThreadの旗を置くどこが分からないのですか?以下はポイントです。

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

は非常にUに感謝実行されている場合は'その内部でスレッドを停止多く。これは私の仕事です –

0

使用この:

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

あなたは法 - オーバーライドのアクティビティを使用することができます。OnBackButtonPressed

@Override 
    public void onBackPressed() { 
     super.onBackPressed(); 
     //Do your stuff here 
    } 
関連する問題