Android 计划服务中的重复任务

Android 计划服务中的重复任务,android,android-service,android-alarms,Android,Android Service,Android Alarms,我需要在后台每1小时重复一次任务(我正在向我的服务器发送一些信息) 我尝试使用一个服务,其延迟后处理程序称之为self handler = new Handler(); runable = new Runnable() { @Override public void run() { try{ //sending info to server.... } catch (Exception e) {

我需要在后台每1小时重复一次任务(我正在向我的服务器发送一些信息)

  • 我尝试使用一个服务,其延迟后处理程序称之为self

       handler = new Handler(); 
    runable = new Runnable() { 
    
        @Override 
        public void run() { 
            try{
    
            //sending info to server....
    
            }
            catch (Exception e) {
                // TODO: handle exception
            }
            finally{
                //also call the same runnable 
                handler.postDelayed(this, 1000*60*60); 
            }
        } 
    }; 
    handler.postDelayed(runable, 1000*60*60); 
    
  • 这不起作用,在1分钟的小时间间隔内,它工作得很好,当我将它改为5分钟时,它工作了大约5次,然后计时出错,一小时后服务关闭

  • 我想尝试使用AlarmManager,但在 它说“从Android 4.4(API级别19)开始,所有重复的警报都是不精确的” 有人知道这有多不精确吗?是秒吗,分钟? 我能靠这个按时工作吗

  • 有人对在服务中重复任务有其他建议吗


  • 谢谢

    您可以使用此代码重复调用oncreate方法或其他任何东西

    public void callAsynchronousTask() {
        final Handler handler = new Handler();
        Timer timer = new Timer();
        TimerTask doAsynchronousTask = new TimerTask() {
            @Override
            public void run() {
                handler.post(new Runnable() {
                    public void run() {
                        try {
                            onCreate();
    
                        } catch (Exception e) {
    
                        }
                    }
                });
            }
        };
        timer.schedule(doAsynchronousTask, 0, 1000); //execute in every 1000 ms
    }
    

    如果您希望将闹钟设置为精确的时间,请使用setExact方法,然后在广播中使用相同的setExact方法设置闹钟并调用您的服务。alarmManager没有setExact功能。在文档中有,但当我在eclipse中按ctrl+space时,我只得到set(…)、setInexactRepeating(…)和setRepeating()。您是否尝试复制该方法名称,并试图找到它不支持的原因?