我试图每小时做一次通知,但想从数据库中填充,我有工作代码,但下一个通知最多不到一个小时

我想制作一个通知应用程序,该应用程序将根据我已完成正在通知的应用程序的数据库中的数据发出警报,我希望它每一小时一次,但通知不超过另一个触发前一个小时。这是代码


Runnable myRunnable = new Runnable(){


 @Override

 public void run() {

   while(true){

     try {

        runOnUiThread(new Runnable(){

                        @Override

       public void run() {

       AsyncDataClass asyncRequestObject = new AsyncDataClass();

       asyncRequestObject.execute(serverUrl, email, day, hourToPass);

       }

                    });

                    counter++;

                    Thread.sleep(3600000);

                } catch (InterruptedException e) {

                    // TODO Auto-generated catch block

                    e.printStackTrace();

                }

            }

        }

    };


Here is the trigger code


PendingIntent pendingIntent = PendingIntent.getBroadcast(LoginActivity.this, 0, alarmIntent, 0);

                AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

                alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 3600000, pendingIntent);

正在执行 AsyncTask 的 PostExcute


Runnable myRunnable = new Runnable(){

    int counter = 0;

    @Override

    public void run() {

        while(true){

            try {


                runOnUiThread(new Runnable(){

                    @Override

                    public void run() {

                        AsyncDataClass asyncRequestObject = new AsyncDataClass();

                        asyncRequestObject.execute(serverUrl, email, day, hourToPass);

                    }

                });

                counter++;

                Thread.sleep(3600000);

            } catch (InterruptedException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

        }

    }

};


长风秋雁
浏览 109回答 2
2回答

狐的传说

您必须创建一个 as :HandlerHandler handler = new Handler();在你打电话的结尾:Runnable()handler.postDelayed(runnable, 1000*60*60);工作示例可以是:Handler handler = new Handler();    Runnable runnable = new Runnable() {        @Override        public void run() {           AsyncDataClass asyncRequestObject = new AsyncDataClass();           asyncRequestObject.execute(serverUrl, email, day, hourToPass);           //To repeat it every hour           handler.postDelayed(runnable, 1000*60*60);        }    };    handler.postDelayed(runnable, 1000*60*60); //call this when you want to start doing the work

开满天机

我会考虑使用执行器服务,除非我误解了您的要求。将运行对象提交给执行程序将允许您每小时安排执行,并且您将能够保证执行时间,而不管上一次执行花费了多长时间,这对于您当前的实现来说可能是一个问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java