【问题标题】:How to perform a task in certain time?如何在特定时间执行任务?
【发布时间】:2012-02-21 14:57:03
【问题描述】:


我需要一个可以执行某些操作的命令,比如说每天早上 7:00。
可能吗?
如果您能给我一些代码示例,我将不胜感激
谢谢!

【问题讨论】:

  • “请提供代码”问题不是一个好主意...

标签: java android scheduled-tasks


【解决方案1】:

是的,你需要AlarmManager类,你创建一个intent和一个日历对象(设置为你想要的时间),然后使用AlarmManager在那个时候运行intent(使用setRepeating让它每天重复)

Intent intent = new Intent(getBaseContext(),
                                some_service.class);
                        PendingIntent pendingIntent = PendingIntent
                                .getService(getBaseContext(), 0, intent, 0);


                        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
                        // Cancel all previous alarms of the same type
                        alarmManager.cancel(pendingIntent);


                        Calendar calendar = Calendar.getInstance();
                        Calendar currentDate = Calendar.getInstance();

                        calendar.add(Calendar.HOUR, 24);
                        calendar.set(Calendar.HOUR_OF_DAY, 07);
                        calendar.set(Calendar.MINUTE, 00);
                        calendar.set(Calendar.SECOND, 00);

                        // Set alarm manager to run at selected time
                        // each day
                        alarmManager.setRepeating(AlarmManager.RTC,
                                calendar.getTimeInMillis(),
                                AlarmManager.INTERVAL_DAY, pendingIntent);

【讨论】:

  • 谢谢!但是我需要这个类来扩展一些东西吗?
  • AlarmManager 是一个系统类,所以你可以把这段代码放到你的主类中使用它,不需要扩展任何东西。
  • 我的意思是。它必须延长服务吗?当它不扩展任何东西时,它就不起作用
  • 很抱歉,我不太清楚您的意思。 AlarmManager 在您指定的特定时间运行 PendingIntent。您可以将 PendingIntent 设置为运行 Intent 以启动 Activity 或启动服务,无论您想要什么。在我的示例中,我启动了一个服务“some_service.class”,并且在该类中您确实需要扩展服务。如果您不想使用服务,您也可以拥有一个扩展 Activity 的类,在这种情况下,您可以将 pendingIntent 更改为 .getActivity()。 .getBroadcast 也是如此(扩展 BroadcastReceiver)
【解决方案2】:

问题是您的应用程序不会 24/7 全天候运行。
但如果是这样,您可以使用 Java 的 Timer 类来实现您的任务。 See Documentation here.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-17
    • 2010-12-31
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 2013-11-02
    • 2023-01-29
    相关资源
    最近更新 更多