为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

长风秋雁 2022-09-01 17:38:00
我想制作一个通知应用程序,该应用程序将根据我已完成正在通知的应用程序的数据库中的数据发出警报,我希望它每一小时一次,但通知不超过另一个触发前一个小时。这是代码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 codePendingIntent 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 的 PostExcuteRunnable 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();            }        }    }};
查看完整描述

2 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

您必须创建一个 as :Handler


Handler 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



查看完整回答
反对 回复 2022-09-01
?
开满天机

TA贡献1786条经验 获得超13个赞

我会考虑使用执行器服务,除非我误解了您的要求。

将运行对象提交给执行程序将允许您每小时安排执行,并且您将能够保证执行时间,而不管上一次执行花费了多长时间,这对于您当前的实现来说可能是一个问题。


查看完整回答
反对 回复 2022-09-01
  • 2 回答
  • 0 关注
  • 108 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信