gpt4 book ai didi

iphone - beginBackgroundTaskWithExpirationHandler 永远不会被调用

转载 作者:可可西里 更新时间:2023-11-01 03:02:34 24 4
gpt4 key购买 nike

我有一个在后台播放音频的应用程序。我正在尝试使用 beginBackgroundTaskWithExpirationHandler 在当前轨道结束时跳到下一首轨道。

下面是播放状态改变时调用的代码。它从不记录“beginBG called”,即使同一方法中的其他代码在后台成功实现。

UIApplication *app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[self ffwButtonPressed:ffwButton];
NSLog(@"beginBG called");
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];

ffwButtonPressed 调用几个不同的方法来改变轨道。完成后...

UIApplication *app = [UIApplication sharedApplication];
if (bgTask != UIBackgroundTaskInvalid) {
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
NSLog(@"end bgTask");

编辑:声明

UIBackgroundTaskIdentifier bgTask;

编辑:在ViewDidLoad

bgTask = 0;

最佳答案

你其实误解了函数-(UIBackgroundTaskIdentifier)beginBackgroundTaskWithExpirationHandler:(void (^)(void))handler

称为“处理程序”的 block 参数是后台任务到期(10 分钟)时将发生的事情。

要让您的代码运行,您需要将您的代码从过期处理程序中取出:

UIApplication *app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
bgTask = UIBackgroundTaskInvalid;
};

[self ffwButtonPressed:ffwButton];
NSLog(@"beginBG called");
[app endBackgroundTask:bgTask];

这是 documentation 的链接

关于iphone - beginBackgroundTaskWithExpirationHandler 永远不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11617786/

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