1

在我的 PhoneGap 1.3 离线应用程序中,我正在使用在官方插件 GitHub 页面中找到的修改后的 iOS 本地通知插件。

我需要根据用户定义的设置安排重复通知(每周/每月),或每 2 周触发多个单一通知。

当我尝试将这 26 个通知安排为每 2 周触发一次时,就会出现问题。

目前我正在使用它来实现:

for (int i = 1; i < 26; i++)
{
    UILocalNotification *localNotif = [[UILocalNotification alloc] init];

    if (localNotif == nil) {
        return;
    }

    NSDate *date = [[NSDate date] dateByAddingTimeInterval: i * 60 * 60 * 24 * 7 * 2];

    localNotif.fireDate = date;
    localNotif.timeZone = [NSTimeZone defaultTimeZone];
    localNotif.alertBody = [NSString stringWithFormat:@"%i: %@", i, msg];

    localNotif.hasAction = NO;
    localNotif.soundName = UILocalNotificationDefaultSoundName;
    localNotif.applicationIconBadgeNumber = 0;

    [[UIApplication sharedApplication] scheduleLocalNotification:localNotif];        

    [localNotif release];

}

在 iPhone 3G 或 iPod Touch 2 上运行此程序时,UI 会冻结大约 3 - 5 秒,这是一个很大的禁忌。有没有办法优化调度通知?

我知道只使用每周和每月重复通知可以解决问题,但客户想要every 2 weeksevery 2 monthsevery 3 months通知,所以我需要安排多个通知。

我试图在新线程中运行循环,[NSThread detachNewThreadSelector:...]这会引发新问题(不时崩溃)。

3G 之后发布的 iPhone 是否会快得多以至于延迟/冻结不存在?我只有这两个古老的设备可以测试。

4

1 回答 1

1

我建议使用以下方法在后台线程中执行创建:(void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg

或者我会尝试重新考虑这个过程。也许与其一次创建价值 2 周的提醒,不如创建一对并设置其他东西来创建其余部分。或者甚至只是创建一个并存储一个重复的布尔值,这样当它触发时它也会创建下一个。

于 2012-05-23T12:04:24.727 回答