Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:在意图服务中的特定时间停止处理程序_Android_Performance_Android Handler - Fatal编程技术网

Android:在意图服务中的特定时间停止处理程序

Android:在意图服务中的特定时间停止处理程序,android,performance,android-handler,Android,Performance,Android Handler,我有一个启动处理程序的intentService,但在一段时间后,我需要停止处理程序。我不知道该怎么做。我有下面的类,但我不确定一旦到达时间,或者当某个小时/分钟的时间过去时,如何停止处理程序。我希望这是尽可能有效的请 public class RedirectService extends IntentService { private Handler handler; private Runnable runnable = new Runnable() { @Ov

我有一个启动处理程序的intentService,但在一段时间后,我需要停止处理程序。我不知道该怎么做。我有下面的类,但我不确定一旦到达时间,或者当某个小时/分钟的时间过去时,如何停止处理程序。我希望这是尽可能有效的请

public class RedirectService extends IntentService {

   private Handler handler;
   private Runnable runnable = new Runnable() {
       @Override
       public void run() {
           foobar();
           handler.postDelayed(this, 2000);
       }
   };

   public LockedRedirectService() {
       super("RedirectService");
   }

   @Override
   protected void onHandleIntent(Intent redirectIntent) {
       // Gets data from the incoming Intent
       int hour = redirectIntent.getIntExtra("hour", 0);
       int min = redirectIntent.getIntExtra("minute", 0);



       handler.postDelayed(runnable, 2000);
       handler.removeCallbacks(runnable);
   }
}

启动一个新线程并等待。时间到了,停止并移除runnable。 或者使用处理程序发布另一个延迟的runnable以停止并删除工作runnable

    public class RedirectService extends IntentService {

    private Handler handler;
    private boolean mRun = false;
    private Runnable runnable = new Runnable() {
        @Override
        public void run() {
            if (mRun) {
                foobar();
                handler.postDelayed(this, 2000);
            }
        }
    };

    public LockedRedirectService() {
        super("RedirectService");
    }

    @Override
    protected void onHandleIntent(Intent redirectIntent) {
        // Gets data from the incoming Intent
        final int hour = redirectIntent.getIntExtra("hour", 0);
        final int min = redirectIntent.getIntExtra("minute", 0);


        mRun = true;
        handler.postDelayed(runnable, 2000);
        //handler.removeCallbacks(runnable);

        new Thread(new Runnable() {
            @Override
            public void run() {
                Thread.currentThread();
                try {
                    Thread.sleep((hour * 60 + min) * 60 * 1000);
                } catch (Exception ignore) {}
                mRun = false;
                handler.removeCallbacks(runnable);
           }
        }).start();

        /* or use handler
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                mRun = false;
                handler.removeCallbacks(runnable);
           }
        }, (hour * 60 + min) * 60 * 1000);
        */
    }

    }