0

我需要做一些递归任务,比如每五秒做一次。如何做到这一点?我需要在后台执行递归任务,所以我想我可以使用Started Service.

PS。我真正想做的是:每五秒钟后使用相机拍照,从后台服务。

我在开发人员指南中找到了以下代码。下面的方法驻留在扩展Handler类的自定义类中:

@Override
      public void handleMessage(Message msg) {
      // Do Something
      // HOW CAN i MAKE A RECURSIVE CALL (TO SOMEHOW CALL THIS FUNCTION) AFTER 5 SECONDS?
      // Stop the service using the startId
      stopSelf(msg.arg1);
      }
  }

我可以像Thread.sleep(5000)以前一样打电话stopSelf()吗?(对我来说没有意义......)

或者我可以打电话给类似的东西this.sendMessageDelayed(msgOb, 5000);吗?

谢谢。

4

2 回答 2

1

好的,这是处理处理程序的一种方法:

int counter=0;
private Handler mHandler = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case MSG_TAKE_PIC:
                if(counter==5) {
                    mHandler.removeMessages(MSG_UPDATE_CALLTIME);
                    break;
                }
                else {
                    //take pic here and then
                    counter++;
                    sendEmptyMessageDelayed(MSG_TAKE_PIC, 5000);
                }

            }
        }
    };

以及您想从哪里开始拍照:

mHandler.sendEmptyMessageDelayed(MSG_TAKE_PIC, 5000);
于 2012-07-20T12:29:00.553 回答
0

我假设您可以修改拍照服务,因为您没有另外说。

你为什么不发送一个开始拍照的消息和一个停止拍照的消息?当您发送 START 消息时,该服务将每 5 秒开始拍照,直到您发送 STOP 消息。

像这样的东西:

class IncomingMessageHandler extends Hanlder implements Runnable {

    private Boolean takePhotos = false;

    public void handleMessage(Message msg) {
        switch(msg.what) {
        case START:
            takePhotos = true;
            new Thread(this).start();
            break;
        case STOP:
            synchronized (takePhotos) {
                takePhotos = false;
            }
            break;
        }
    }

    public void run() {
        while(takePhotos) {
            takePhoto();
            synchronized (takePhotos) {
                takePhotos.wait(5000);
            }
        }
    }
}

(这是服务的处理程序实现)

于 2012-07-20T14:38:17.940 回答