2017-09-26 16 views
2

私は検索(stackoverflow、google)の問題があり、まだ良い結果は得られませんでした。私はスレッド内に簡単なダウンローダを書いた。それは(ダウンローダ)私の希望のファイルをダウンロードし、私のアンドロイド携帯電話のストレージに保存します。今私はクラス内でメソッドを使ってダウンロードを止めたいと思っています。言い換えれば、私はダウンローダスレッドを止めたいと思う。以下は私のコードです。これはどうすればできますか? 私を案内してください。宜しくお願いします。私の例でスレッドを停止する方法

package com.test; 

import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 


public class MainActivity extends Activity { 

    Thread thread; 

    Handler handler = new Handler(); 

    TextView txt; 

    boolean first = true; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Button btn = (Button) findViewById(R.id.button1); 
     txt = (TextView) findViewById(R.id.textView1); 

     btn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       if (first) { 
        Downloader downloader = new Downloader("http://192.168.43.131/and/filmLow3.mp4"); 
        first = false; 
       } else { 
        if (!thread.currentThread().isInterrupted()) { 
         thread.interrupt(); 
        } 
       } 
      } 
     }); 

    } 


    public class Downloader { 

     int downloaded = 0; 


     public Downloader(final String link) { 

      thread = new Thread(new Runnable() { 

       @Override 
       public void run() { 
        try { 
         URL url = new URL(link); 
         HttpURLConnection connection; 
         connection = (HttpURLConnection) url.openConnection(); 
         connection.connect(); 

         final int size = connection.getContentLength(); 

         InputStream inputStream = connection.getInputStream(); 

         FileOutputStream outputStream = new FileOutputStream(Base.appPath + "file.mp4"); 

         byte[] buffer = new byte[8 * 1024]; 
         int len = 0; 

         while ((len = inputStream.read(buffer)) != -1) { 
          downloaded += len; 
          outputStream.write(buffer, 0, len); 
          handler.post(new Runnable() { 

           @Override 
           public void run() { 
            txt.setText(downloaded/1024/1024 + " MB || " + size/1024/1024 + " MB"); 

           } 
          }); 
         } 
         inputStream.close(); 
         outputStream.close(); 

        } 
        catch (IOException e) { 

         e.printStackTrace(); 
        } 

       } 
      }); 
      thread.start(); 
     } 

    } 
} 
+0

https://stackoverflow.com/questions/19894607/java-how-to-stop-thread https://stackoverflow.com/questions/2491588/how-a-thread-should- close-itself-in-java – XtremeBaumer

+0

whileループ状態がfalseになると、スレッドは停止しませんか? – Arjit

+0

停止します。しかし、私はそれをダウンロード中とループの中で停止したい。 – Hadi

答えて

3
thread.interrupt(); 

そして、あなたは、スレッドが中断された場合はスピニングコードをチェックインする必要があります。例えば

if(Thread.currentThread().isInterrupted()) return; 
+0

私の友人、これは動作しません! – Hadi

+0

これは別のスレッドからスレッドを停止する方法です。変更を加えたコードを投稿すると、変更する必要があるものが表示されます。また、スレッドを即座に停止することはできません。信号を送るだけで、スレッドはそれを探します。ライブラリによってInterruptedExceptionがスローされることがありますが、必ずしも – mlecz

+0

であるとは限りません。私は私のスレッドを停止するために上記のコードを正確に使用します。 – Hadi

関連する問題