3

onStart() メソッドでスレッドを作成するアクティビティがあります。スレッドは、TCP 経由でネットワーク データを読み取るために使用され、増分ごとにブール変数をチェックする while ループ内にブロッキング ネットワーク読み取りメソッドがあります。

私の問題は、バック キーを使用してアクティビティが破棄されたときに、ブール ループ制御変数の値を false に設定したのですが、ブロッキング ネットワーク メソッドでスタックしているため、スレッドが終了しないことです。

public class MyActivity extends Activity implements Runnable
{
    Thread thread;
    boolean loopControl;
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
    }
    protected void onStart()
    {
        super.onStart();
        loopControl=true;
        thread = new Thread(this);
        thread.start();
    }

    public void run()
    {
        while(loopControl)
        {
            directories = (Vector<String>) TCPFunctions.inputStream.readObject();
        }
    }

    protected void onDestroy()
    {
        super.onDestroy();
        loopcontrol = false;
    }
}

このアクティビティが再度起動されたときに問題が発生するため、このようなスレッドを希望どおりに終了するにはどうすればよいですか。

実際には、アクティビティが開始されるたびに、サーバーから読み取るデータがあります

4

3 に答える 3

0

何を達成しようとしていますか?

この場合、Activityコールバックメソッドの1つからバックグラウンドスレッドを開始することは、おそらく良い考えではありません。アクティビティは破棄され、最初から再作成される可能性があり(たとえば、これは電話を回転させる際のデフォルトの動作です)、その場合、スレッドが失われます...

より良い方法はサービスを作成することかもしれません...しかし、アクティビティ/サービス/他のものからのtcp通信についてのSOに関する多くの質問/回答がここにあります。

于 2012-08-04T22:36:01.797 に答える
0

onDestroy() メソッドで試してください

thread.interrupt();  
thread=null;
于 2012-08-04T21:08:31.090 に答える