gpt4 book ai didi

java - 在 for 循环中创建新 Intent 是好是坏?

转载 作者:搜寻专家 更新时间:2023-11-01 08:32:49 24 4
gpt4 key购买 nike

我目前的问题是,在 for 循环中创建新 Intent 是好是坏。我有以下情况:

1.

public static void reactivateReminders(Schedule schedule) {
ArrayList<Lecture> allLectures = schedule.getAllLectures();

for(Lecture lecture : allLectures) {
...
// Set up various things for the reminder
...
Intent intent = new Intent(getApplicationContext(), ReminderReceiver.class);
String at = getResources().getString(R.string.at);
String with = getResources().getString(R.string.with);
String beginH = ScheduleHelper.formatNumber(changedBeginH);
String beginM = ScheduleHelper.formatNumber(changedBeginM);
String room = lecture.getRoom();
intent.putExtra("contentText", at + " " + beginH + ":" + beginM + " in " + room + " " + with + " " + lecture.getLecturer());

PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), lecture.getAlarmId(), intent, 0);//PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarm = (AlarmManager) getSystemService(ALARM_SERVICE);

if(lecture.getBeginH() != beginH || lecture.getBeginM() != beginM)
alarm.cancel(pendingIntent);

alarm.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis() + offset, 1000 * 60 * 60 * 24 * 7, pendingIntent);
}
}

2.

public static void reactivateReminders(Schedule schedule) {
ArrayList<Lecture> allLectures = schedule.getAllLectures();
Intent intent = new Intent(getApplicationContext(), ReminderReceiver.class);

for(Lecture lecture : allLectures) {
...
// Set up various things for the reminder
...
String at = getResources().getString(R.string.at);
String with = getResources().getString(R.string.with);
String beginH = ScheduleHelper.formatNumber(changedBeginH);
String beginM = ScheduleHelper.formatNumber(changedBeginM);
String room = lecture.getRoom();
intent.putExtra("contentText", at + " " + beginH + ":" + beginM + " in " + room + " " + with + " " + lecture.getLecturer());

PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), lecture.getAlarmId(), intent, 0);//PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarm = (AlarmManager) getSystemService(ALARM_SERVICE);

if(lecture.getBeginH() != beginH || lecture.getBeginM() != beginM)
alarm.cancel(pendingIntent);

alarm.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis() + offset, 1000 * 60 * 60 * 24 * 7, pendingIntent);
}
}

哪个选项更好?我不太熟悉 Java,所以我不知道 Java 如何处理其中任何一个。也许根本没有什么区别,但由于我通常使用 C++ 编程,在循环内创建新对象让我担心。

提前感谢您的帮助。

编辑:结论:
正如 Alex Shutov 所提到的,最好不要一次设置所有提醒。用户可能只需要即将出现的下一个。

要实现这一点,您应该在应用程序中的某个位置设置最早的提醒,并将其他提醒(或者更确切地说,您使用的数据)存储在应用程序外部的某个位置(XML、SQL 等)中,以便您的服务可以在最早的提醒启动后读取文件以加载下一个。

这样做,您就不会因为用户甚至不需要的提醒而给系统带来负担。我会尝试在某个时候实现这个想法,但现在我会使用我的方法。

关于我的代码:
对于我发布的代码,一个更好的方法是在循环外创建新的 Intent 。由于我放入的额外内容具有相同的 key ,因此每次都会覆盖,您不必创建新的 Intent 。其他常量变量,如我的“at”和“with”,也可以放在循环之外。可以删除变量“beginH、beginM、room”,您可以直接在 putExtra 参数中调用函数。您还可以将 PendingIntent 和 AlarmManager 行放在循环之外。

我会发布代码,但我认为我的帖子会太大。感谢您的快速帮助:)

最佳答案

这是一个坏主意,因为你用不必要的任务使系统过载,你应该改为调度最近的事件,在 IntentService 中安排下一个事件

关于java - 在 for 循环中创建新 Intent 是好是坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39271476/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com