2

デバイスをロック/ロック解除するときにスレッドを停止/再開するための有効な解決策が見つかりません。誰か助けてもらえますか、それを行う方法をどこで見つけることができるか教えてください。電話がロックされているときにスレッドを停止し、電話がロック解除されたときにスレッドを再開する必要があります。

4

1 に答える 1

12

Java は、スレッドを停止するための協調割り込みモデルで動作します。つまり、スレッド自体からの協力がなければ、実行中にスレッドを単純に停止することはできません。スレッドを停止したい場合、クライアントは Thread.interrupt() メソッドを呼び出してスレッド停止を要求できます。

public class SomeBackgroundProcess implements Runnable {

    Thread backgroundThread;

    public void start() {
       if( backgroundThread == null ) {
          backgroundThread = new Thread( this );
          backgroundThread.start();
       }
    }

    public void stop() {
       if( backgroundThread != null ) {
          backgroundThread.interrupt();
       }
    }

    public void run() {
        try {
           Log.i("Thread starting.");
           while( !backgroundThread.interrupted() ) {
              doSomething();
           }
           Log.i("Thread stopping.");
        } catch( InterruptedException ex ) {
           // important you respond to the InterruptedException and stop processing 
           // when its thrown!  Notice this is outside the while loop.
           Log.i("Thread shutting down as it was requested to stop.");
        } finally {
           backgroundThread = null;
        }
    }

スレッド化の重要な部分は、InterruptedException を飲み込まず、代わりにスレッドのループとシャットダウンを停止することです。これは、クライアントがスレッド割り込み自体を要求した場合にのみこの例外が発生するためです。

したがって、ロック解除のために SomeBackgroundProcess.start() をイベントに接続し、ロック イベントに SomeBackgroundProcess.stop() を接続するだけです。

于 2012-08-08T14:43:03.040 に答える