0

アクティビティが開始され、次のアクティビティにいつ進むかをチェックするスレッドを作成します。しかし、時々、このアクティビティが自分自身を殺す必要があります。onPause はこれを行いますが、その後スレッドはまだ生きていて、時間がなくなると新しいアクティビティを開始します。このスレッドを強制終了して goToFinals インテントを停止することは可能ですか?

 public class Questions extends Activity {

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        String in = getIntent().getStringExtra("time");         
        long tmp = Long.parseLong(in);
        endTime = (long) System.currentTimeMillis() + tmp;

        Thread progress = new Thread(new Runnable() {

            public void run() {
                while(endTime > System.currentTimeMillis()) {
                    try {
                        Thread.sleep(200);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                Intent goToFinals = new Intent(Questions.this,End.class);
                        startActivity(goToFinals);
            }

        });
        progress.start();

    }

    @Override
    protected void onPause() {
        super.onPause();
        finish();
    }
}
4

3 に答える 3

2

スレッドを停止するには、いくつかの方法があります。Threadオブジェクトを保存すると、それを呼び出すことができますinterrupt()

 progress.interrupt();

これにより、スタック トレースを出力するだけでなく、返すべき がsleep()スローされます。InterruptedException次のようなループも実行する必要があります。

 while(endTime > System.currentTimeMillis()
     && !Thread.currentThread().isInterrupted()) {

ある種のシャットダウン フラグを設定することもできます。

// it must be volatile if used in multiple threads
private volatile boolean shutdown;

// in your thread loop you do:
while (!shutdown && endTime > System.currentTimeMillis()) {
    ...
}

// when you want the thread to stop:
shutdown = true;
于 2012-04-24T16:58:50.773 に答える
0

スレッドを安全に終了するには、最初に thread_instance.interrupt() を呼び出す必要があります。その後、スレッドが中断されているかどうかを確認できます。このリンクを参照してください

于 2012-04-24T16:59:12.577 に答える
0

kill Java スレッドについては、この投稿を参照してください。彼らが推奨する方法は、バックグラウンド スレッドに停止を要求するフラグとして共有変数を使用することです。この変数は、スレッドの終了を要求する別のオブジェクトによって設定できます。

于 2012-04-24T17:00:54.357 に答える