1

サービスで新しいスレッドを初期化しますが、サービスを開始すると新しいスレッドが作成され、カメラを使用しているためアプリがクラッシュします。そのスレッドの唯一のインスタンスになるようにするにはどうすればよいですか?

スレッドが閉じているとき? 作ったサービスを閉鎖すると、それも閉鎖されますか?

4

2 に答える 2

4

ロックまたは静的変数を使用できます。

private static boolean isThreadRunning;

そしてあなたのサービスで:

if(isThreadRunning)
   return;

Thread t=new Thread(new Runnable(){

protected void run(){
   isThreadRunning=true;
   while(yourcondition){
     //your thread code...
   }
   isThreadRunning=false;
   //if you want to start another thread after this one is ended, you should post a message to a handler here and it should start another thread like this
}

});
于 2012-10-08T14:46:57.780 に答える
0

Handlerこれは、スレッド操作で Google が推奨するクラスを使用して実現することもできます。以下のコードは、 での使用方法の一般的な例を示していますService

public class MyService extends Service{


    private final Handler handler = new Handler();

    private final static int RUNABLE_WHAT=6558057;
    private final static int PEROID=6*1000;
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        if(!handler.hasMessages(RUNABLE_WHAT))
        {
            handler.sendMessageDelayed(new Worker().extractMessage(), PEROID);
        }
        return START_STICKY;
    }

    private class Worker implements Runnable{

        @Override
        public void run() {
            //DO WORK HERE
            handler.sendMessageDelayed(new Worker().extractMessage(), PEROID);
        }
        private Message extractMessage()
        {
            Message message = Message.obtain(handler, this);
            message.what=RUNABLE_WHAT;
            return message;
        }
    }


}
于 2013-01-29T10:26:40.837 に答える