问题标签 [multitasking]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1564 浏览

iphone - 试图确定核心音频与 iPhone 后台执行的问题

我在商店里有一个音频应用程序。它适用于 iOS 4.0 之前的 iPhone OS 版本。我正在开发一个新版本,首先让应用程序符合新的 iOS 多任务处理功能。(我的 iPhone 上装有 iOS 4.0,并已升级到最新的 xCode 和 SDK。)

结果是一场演出。

o 当我在 iPhone 上安装应用程序并在调试器中运行时,或在 iPhone 关机后启动应用程序时,应用程序运行良好 - 当我按下按钮时播放音频,或从保存的“状态”重新启动音频上次运行应用程序的时间。

o 如果我尝试按下 Home 按钮,然后从后台重新启动应用程序,音频(a 和 1-n 音频流的混合)会发出只有我能识别的断断续续的声音。

o 如果 - 在音频清晰的情况下 - 我拨打 iPhone,我可以接听或拒绝接听电话。在这两种情况下,应用程序都会干净利落地恢复正常运行。

请注意,在后台模式下我不会尝试播放任何内容。我只是想关闭一些东西并在被问到时将它们带回来。

技术:所有的音频逻辑都使用 RemoteIO。(我计划有一天做一些相当复杂的信号处理。)

请原谅伪代码叙述 - 一些真实代码非常广泛。

主视图控制器:

o viewDidLoad - 没什么特别的

o didBecomeActive 将自己设置为音频会话委托;将 AudioSessionCategory 设置为 MediaPlayback;设置 AudioSessionActive;创建一个播放器(见下文);重新启动之前播放的任何声音;

o willResignActive 保存正在播放的状态;停止所有声音;停止播放器;将音频会话设置为非活动状态;

o didEnterBackground - 什么都没有(方法已注册,但没有内容。)

o willEnterForeground - 什么都没有(方法已注册,但没有内容。)

Player 概述 - 我的班级:Player 是一个单身人士。我确保单例实例被销毁,并在 didBecomeActive 中创建了一个新实例。实例化单例实际上会启动 AudioUnit。

构造函数setupRemoteIO;启动音频输出单元开始;停止音频输出单元停止;播放器回调通常的东西;

>

以下是我的 MainViewController 中的一些方法:

这是 NaturePlayer 的一个方法:

}

我检查了:正在调用 stop(),然后调用 AudioOutputUnitStop(); 还检查了:AudioOutputUnitStop 上的文档说它会阻塞,直到所有活动完成。

0 投票
1 回答
116 浏览

iphone - 有没有办法在 iOS 4 中禁止多任务处理?

我希望我的应用程序在用户点击主页按钮时退出,而不是进入后台。这可能吗?

0 投票
1 回答
3612 浏览

iphone - 在应用程序进入前台时刷新视图控制器内容

我有一个带有标签栏的应用程序,其中有几个带有用户生成内容的标签。当每个视图控制器加载时,viewDidLoad 方法向服务器发出 HTTP 请求以获取数据,然后相应地填充其视图。但是,一旦加载了所有数据,视图将保持不变(除非视图控制器被卸载并重新加载)。

许多具有用户生成内容的其他应用程序具有类似的行为,除了如果应用程序进入后台然后再次回到前台,每个视图都会重新加载。也就是说,当用户在应用程序处于活动状态时在各个选项卡之间切换时,内容不会自动刷新。如果用户“退出”应用程序,然后稍后再返回,视图将被重新加载。

是否有设计应用程序以这种方式运行的标准做法?具体来说,我想知道是否有 UIKit 细节可以利用来刷新我对应用程序“重新启动”的看法。

否则,我想一个简单的方法是让每个视图控制器在 viewDidLoad 中注册通知并监听进入前台的应用程序。然后控制器可以通过重新加载其数据来响应每个通知。

0 投票
2 回答
307 浏览

iphone - 多任务处理和终止

如果用户通过多任务栏杀死您的应用程序,如果它已移动到后台,是否有可能对它做出反应?根据我的观察,applicationWillTerminate:不会被调用。

在我看来,在这种情况下退出之前不可能进行清理。

0 投票
0 回答
1586 浏览

iphone - 导致iOS终止后台应用程序的远程控制事件

我的应用使用 AVAudioPlayer 播放背景音频并从 iOS 接收远程控制事件。播放音频时一切正常,但如果音频暂停并且我的应用程序移到后台,就会发生一些奇怪的事情。如果我在 10 分钟后使用蓝牙设备恢复/取消暂停音频,iOS 会终止我的应用程序并显示以下消息:

这有两件非常奇怪的事情。

  1. iOS 不会在 10 分钟后关闭我的应用程序。只有在通过蓝牙接收到远程控制命令后才会这样做。

  2. 如果我使用 iOS 的遥控器按钮或耳机上的遥控器,我的应用程序将毫无问题地继续播放音频。

我无法弄清楚为什么蓝牙远程控制消息会导致 iOS 终止我的应用程序。我已经能够确认 Pandora 应用似乎没有类似的问题。

有人知道吗?

更新:进一步的测试揭示了更清晰的错误描述。在音频暂停 10 分钟或更长时间并且应用程序遇到内存不足警告后尝试恢复背景音频时,似乎会发生这种应用程序的强制 iOS 崩溃。

重现错误需要执行以下步骤:

  1. 要么暂停应用程序的音频,然后将其发送到后台(点击主页按钮或切换到另一个应用程序),要么在应用程序处于后台时暂停应用程序的音频
  2. 导致应用程序遇到内存不足警告(模拟或真实)
  3. 10 分钟后,尝试使用从蓝牙设备或扬声器底座等设备触发的远程控制事件播放音频。

注意:iOS 似乎仅在从外部设备(如蓝牙设备、扬声器底座或汽车适配器)启动最终远程控制事件时强制使应用程序崩溃。使用 iOS 内置的“遥控器”界面或耳机上的遥控器似乎不会导致崩溃。

就像评论中提到的乔治一样,我已经能够用我自己的应用程序、潘多拉和至少一个其他音频播放应用程序来重现这一点。我已经向 Apple 提交了错误报告。

0 投票
3 回答
1551 浏览

iphone - 如何在 iOS 4 的后台播放多个音频文件?

我使用 AVAudioPlayer 和 AVAudioSession 在我的 iPhone 应用程序的后台运行音频...

现在我的问题是我已经有一个书面代码,它接受用户的一些歌曲作为输入,并使用 AVAudioPlayer 一个接一个地播放它们......

问题是,当应用程序在播放其中一个文件时进入后台时,音频会继续播放,但完成后,声音会消失......在前台完成文件后,我只需执行一些代码即可播放下一个,但在后台这是不可能的......

我考虑过请求一些时间来完成这项工作并运行我的代码,但我不能这样做,因为音频文件总是在变化并且它们可能很长......所以请告诉我我应该怎么做?是否有任何作为背景音频运行的内置播放列表播放器?还是有其他解决方案?我真的需要把它投入工作......

多谢

0 投票
1 回答
126 浏览

ios4 - 谁能演示如何为 iPhone 创建一个在后台运行的应用程序?

我想知道在技术上是否可以在 iPhone 上创建一个在后台运行的应用程序,无论是在播放音频或 GPS、VOIP 等时搭载,还是使用第三方 API。我能够使用音频播放创建一个。现在我正在寻找其他的可能性。我知道这不会在应用商店获得批准,但我只想知道这是否只是应用商店批准问题而不是技术问题。谢谢。

0 投票
3 回答
13136 浏览

ios4 - iOS4上的Phonegap后台服务?

我可以让一个在 iOS 4 上运行的 phonegap 应用程序在它不是活动应用程序时拥有后台服务(例如,每小时检查一个 url 并在有任何更改时提醒用户)?

如果是这样,怎么办?

0 投票
5 回答
1735 浏览

iphone - 由于 SimpleAudioEngine,应用程序在后台崩溃

所以我尝试使用 SimpleAudioEngine 在我的 Cocos2D 游戏中播放一些效果,但是在我添加它们之后,我的应用程序在进入后台(多任务处理)时崩溃。我在互联网上搜索了这个问题,但我发现的所有解决方案都对我不起作用。我确实发现这个问题发生是因为我的应用程序在后台播放时以某种方式尝试播放声音。

在控制台中它向我显示(这是我发现其他人遇到的相同错误):

sgx 错误(不允许后台 gpu 访问):

还有一件事,当我在模拟器上运行我的应用程序时,甚至在我的设备上仔细调试(在应用程序运行时与 XCode 逐行运行)时,这不会发生。

0 投票
2 回答
123 浏览

iphone - 构建应用需要支持ios4 muititask怎么办?

我正在开发一个应用程序,它从互联网获取位置列表,并在单击表格列表的一项时触发地图应用程序。

我发现当我尝试从地图应用程序返回时(双击或仅按一下主屏幕键),我的应用程序只是重新启动到第一个屏幕。

我知道 ios4 具有多任务功能,我的应用程序是用 SDK3 构建的,并在我的新 ipod4 中进行测试。如果我想让用户看到他回来时离开的最后一个屏幕,我该怎么办。