浏览器页面关闭后台线程会中断吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浏览器页面关闭后台线程会中断吗相关的知识,希望对你有一定的参考价值。

不会。
1.浏览器有两个基本概念,进程和线程。
2.进程(process)是程序的一次执行过程,是一个动态概念,是程序在执行过程中分配和管理资源的基本单位,线程(thread)是CPU调度和分派的基本单位,它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
3.简单的说呢,进程可以理解成正在执行的应用程序,而线程呢,可以理解成我们应用程序中的代码的执行器。而他们的关系可想而知,线程是跑在进程里面的,一个进程里面可能有一个或者多个线程,而一个线程,只能隶属于一个进程。
4.大家都知道,浏览器属于一个应用程序,而应用程序的一次执行,可以理解为计算机启动了一个进程,进程启动后,CPU会给该进程分配相应的内存空间,当我们的进程得到了内存之后,就可以使用线程进行资源调度,进而完成我们应用程序的功能。
5.而在应用程序中,为了满足功能的需要,启动的进程会创建另外的新的进程来处理其他任务,这些创建出来的新的进程拥有全新的独立的内存空间,不能与原来的进程内向内存,如果这些进程之间需要通信,可以通过IPC机制(Inter Process Communication)来进行。
参考技术A 不会中断。在Spring MVC应用程序中,如果一个页面(浏览器窗口)在功能运行时关闭,它会停止应用程序和正在进行的处理,还是会继续在服务器上进行。

ios - 即使应用程序关闭,我也可以运行后台线程吗

【中文标题】ios - 即使应用程序关闭,我也可以运行后台线程吗【英文标题】:ios - Can I run background thread even app is turned off 【发布时间】:2014-12-30 04:15:26 【问题描述】:

我有一个应用程序,它会在特定时间提醒用户。现在,我想每 60 分钟(或其他持续时间:1 天、1 周、...将来)从服务器同步数据。即使应用程序已关闭,也必须运行它。

我也听到了很多不同的答案,但大多数是“iOS不允许开发人员制作后台线程”。有人可以帮我确认一下吗?

如果我们不能做后台线程,是否有其他解决方案来解决这个问题?

我期待听到任何人的答案!

谢谢, 瑞恩

【问题讨论】:

【参考方案1】:

如果您只需要定期提醒用户,则确实可以安排本地通知并且相当容易实现。如果您需要实际更新内容,请查看后台获取:https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

【讨论】:

感谢您的回答!似乎这里是现在最好的解决方案之一。【参考方案2】:

这不是您要找的,但请参阅App Programming Guide for iOS: Background Execution,尤其是机会性地获取少量内容部分:

机会性地获取少量内容

需要定期检查新内容的应用可以要求系统唤醒它们,以便它们可以启动对该内容的提取操作。要支持此模式,请在 Xcode 项目的 Capabilities 选项卡的 Background mode 部分启用 Background fetch 选项。 (您也可以通过在您的应用程序的Info.plist 文件中包含带有提取值的UIBackgroundModes 键来启用此支持。)启用此模式并不能保证系统会给您的应用程序任何时间执行后台提取。系统必须平衡您的应用程序获取内容的需求与其他应用程序和系统本身的需求。在评估该信息后,系统会在有好的机会时为应用留出时间。

当一个好的机会出现时,系统会唤醒或启动您的应用程序到后台并调用应用程序委托的application:performFetchWithCompletionHandler: 方法。使用该方法检查新内容并在内容可用时启动下载操作。完成下载新内容后,您必须立即执行提供的完成处理程序块,传递指示内容是否可用的结果。执行此块会告诉系统它可以将您的应用程序移回挂起状态并评估其电源使用情况。快速下载少量内容并准确反映何时有内容可供下载的应用程序,与需要很长时间才能下载其内容或声称内容可用但随后执行的应用程序相比,更有可能在未来获得执行时间不下载任何东西。

下载任何内容时,建议您使用NSURLSession 类来启动和管理您的下载。有关如何使用该类管理上传和下载任务的信息,请参阅URL Loading System Programming Guide。

【讨论】:

问题是,绝对不能保证什么时候会发生。 “当一个好机会出现时”可能是一周后。 完全正确。没有“每 60 分钟执行一次网络请求”功能,只有这种机会主义的后台获取。这是 Apple 批准的在应用程序不活动时进行网络请求的机制(除非您是那些特殊用途的后台模式之一,例如 VOIP 或您有什么),或者您进行推送通知,这完全是另一回事。 谢谢罗伯!您的回答对我很有帮助,感谢您详细解释。【参考方案3】:

您可以安排本地通知来提醒用户,但就像在 android 中一样,您不能运行后台服务。

【讨论】:

【参考方案4】:

你有它倒退。该应用程序如果未运行,则无法唤醒以检查服务器。但是服务器可以将数据推送到应用程序并唤醒它——这就是推送通知(远程通知)的全部内容:

https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/WhatAreRemoteNotif.html#//apple_ref/doc/uid/TP40008194-CH102-SW1

所以当你想同步到应用程序时推送它。

【讨论】:

感谢您的回答,马特。这是迄今为止对我最有帮助的答案之一。

以上是关于浏览器页面关闭后台线程会中断吗的主要内容,如果未能解决你的问题,请参考以下文章

后台线程(daemon)

ios - 即使应用程序关闭,我也可以运行后台线程吗

ios socket一直在发送数据后台时会断开吗

2021年的Android后台线程[关闭]

关于C# WPF线程后台运行的

如何中断AsyncTaskLoader后台线程?