我的后台任务需要很长时间才能完成,操作系统正在扼杀它.我正在尝试在线同步我的联系人,这是我正在做的事情:
从电话簿获取所有联系人(需要约1秒)
将它们上传到服务器(约2秒)
从服务器检索所有联系人(~2-3秒)
从ContactStore中删除所有联系人(ContactStore.DeleteAsync有时需要1分钟才能完成)
创建一个ContactStore并导入所有联系人)(1000个联系人约1-2分钟)
我有~100个联系人并且它运行良好,但我想测试~1000个联系人,并且每次都没有完成.我正在使用MaintenanceTrigger,但我认为它对于后台任务来说仍然太多了,但我需要对此进行确认.应该允许MaintenanceTrigger任务执行更多资源密集型任务,那么为什么操作系统会终止我的后台任务呢?
抱歉,我被卡住了,但是我正在尝试启动后台任务(XCode8,迅速3)
来自此处的示例: https : //developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html#//apple_ref/doc/uid/TP40007072-CH4-SW3
在AppDelegate.swift中:
func applicationDidEnterBackground(_ application: UIApplication) {
var bgTask: UIBackgroundTaskIdentifier = 0;
bgTask = application.beginBackgroundTask(withName:"MyBackgroundTask", expirationHandler: {() -> Void in
print("The task has started")
application.endBackgroundTask(bgTask)
bgTask = UIBackgroundTaskInvalid
})
}
Run Code Online (Sandbox Code Playgroud)
该应用程序从未显示“任务已开始”消息。我究竟做错了什么?
我正在使用 Django 和 Celery 来运行我的后台任务。我有一个任务可能会因某些 IO 原因而失败:
@shared_task(bind=True)
def mytask(self, someargs):
try:
do_some_io_operation()
except SomeException as e:
self.retry(max_retries=5)
# do some other stuff
Run Code Online (Sandbox Code Playgroud)
我只想在最后一次重试失败时执行一些代码并退出函数而不引发异常。是否可以?
我正在使用具有content-available:true标志的远程通知,以在无提示推送通知时在后台启动应用程序,并处理或从远程API获取更新。当应用程序处于前台状态或上次运行后处于挂起状态时,代码可以正常执行。
在后台测试期间,当系统根据传入的静默推送通知启动应用程序时,仅对代码进行了部分处理,并且在大约150毫秒后迅速将其挂起。我希望该应用程序将有30秒的时间来处理传入的通知及其有效负载。如果需要更多时间来处理和/或获取新数据,是否需要调整应用程序功能或请求后台任务?
部署目标iOS 8,在iOS 9上进行测试.Xcode 7.3.1,Swift 2.2.1。
功能:启用后台模式,模式:启用远程通知
AppDelegate
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
if let userInfo = userInfo as? [String: AnyObject] {
// Processing of the payload is done in separate Operation class (using Operations framework)
// The completion handler is called on the end of the processing/fetching in that operation
// But in case of launching the app in the background it never reaches the call of the completion …Run Code Online (Sandbox Code Playgroud) 我想在后台任务的线程中做一些事情,所以我尝试使用Task.Run()但它不起作用.
任何人都可以告诉我另一种在后台任务中创建线程的方法.
这是我的代码:
public sealed class KatzBackgroundTask : IBackgroundTask
{
public void Run(IBackgroundTaskInstance taskInstance)
{
RawNotification notification = (RawNotification)taskInstance.TriggerDetails;
string content = notification.Content;
System.Diagnostics.Debug.WriteLine(content);
testLoop();
}
async void testLoop()
{
await Task.Run(() =>
{
int myCounter = 0;
for (int i = 0; i < 100; i++)
{
myCounter++;
//String str = String.Format(": {0}", myCounter);
Debug.WriteLine("testLoop runtimeComponent : " + myCounter);
}
}
);
}
}
Run Code Online (Sandbox Code Playgroud)
当我删除await Task.Run()for循环可以正常运行,但是当我不删除它时,for循环无法运行.
我有一个简短的问题,如果我更新包含BackgroundTask的App,更新后是否需要注销并重新注册任务?我已经体验到在某些用户的设备上进行更新后,BackgroundTask将不再起作用,并且用户必须禁用并再次启用它。我在msdn文档中看到一个“ ServicingComplete” BackgroundTask,应在应用程序更新后启动,因此在其中重新注册我的主BackgroundTask是否正确?还是在App更新后使简单的BackgroundTask达到100%的最喜欢的方法是什么?
tl; dr:如何在不运行应用程序的情况下注册后台任务?
长版:
我想在每次用户登录时注册后台任务SystemTriggerType.UserPresent.
我找到了有关注册任务的信息,但这是必须执行的代码.如果必须在应用程序运行后执行任务,那就没问题了.但是如何在不运行应用程序的情况下注册任务?后台任务可以通过注册
var builder = new BackgroundTaskBuilder();
Run Code Online (Sandbox Code Playgroud)
然后
builder.Name = taskName;
builder.TaskEntryPoint = taskEntryPoint;
builder.SetTrigger(trigger);
BackgroundTaskRegistration task = builder.Register();
Run Code Online (Sandbox Code Playgroud)
如上所述: 注册后台任务.
但正如我所说 - 我的问题是如何在应用程序执行之前运行此代码.
我知道iOS允许运行后台任务,例如,继续接收位置更新,但是可以在手表应用程序中执行此操作吗?在Xcode 9.3中,我已经为"后台模式"和所选位置配置了我的应用程序,并且已经为WatchKitExtension创建了一个Info.plist,这是"应用程序寄存器用于位置更新"的"必需后台模式"条目.
但是我的手表应用程序在屏幕关闭时以及它在底座时仍会暂停.
但是,针对watchOS的应用程序编程指南似乎排除了在后台运行以接收位置更新的可能性,因为它只允许对四类活动进行后台处理:
SO的其他帖子表明这是不可能的,但证明负面是困难的,所以我再问:
我试图让手表应用程序在后台运行以接收位置更新,或者Xcode正在做出WatchOS无法提供的承诺,从而"鞭打死马".
我\xe2\x80\x99m 之前在使用 iOS 14.0 时遇到了以下问题 - 通过后台位置权限我可以:
\n使用 iOS14 重新测试,没有精确的位置,我的应用程序不再因应用程序切换器终止而被唤醒。
\n重新启用精确位置权限,一切都像以前一样。
\n在没有精确位置权限的情况下,我需要做什么才能让后台应用程序唤醒 iBeacon 区域?
\n或者
\n如何检测缺少精确位置权限并通知用户应用程序将无法按预期运行?
\n\ncllocationmanager ibeacon region-monitoring background-task ios14
background-task ×10
c# ×4
ios ×3
uwp ×3
swift ×2
apple-watch ×1
background ×1
celery ×1
django ×1
ibeacon ×1
ios14 ×1
location ×1
watchkit ×1
watchos ×1