iOS 11 Widget运行状态及更新触发条件技术问询
嘿,针对你问的这几个iOS 11 Widget的问题,我给你拆解清楚:
Widget是运行在前台还是后台?
iOS 11里的Widget属于Today Extension,它是一个独立的后台进程,和宿主App不在同一个进程空间里。哪怕你打开Today View/通知中心看到Widget,它也不是以“前台App”的身份运行,只是在系统的容器视图里展示内容,本质还是后台Extension进程。仅与Today View或Notification Center交互时,Widget是否会更新或调用宿主应用?
当你打开Today View/通知中心时,系统会触发Widget的刷新逻辑(比如调用widgetPerformUpdate方法),这个过程是Widget自己的Extension完成的,不会主动调用或唤醒宿主App。如果需要和宿主App共享数据,得通过App Groups来实现,但这只是数据同步,不属于“调用宿主应用”的范畴;只有当用户点击Widget跳转宿主时,才会启动宿主App。是否必须物理触摸或选中Widget,才能使其更新或与宿主应用通信?
不需要。Widget有自动更新机制:你可以通过TimelineProvider设置刷新间隔,系统会在后台自动触发Widget更新,完全不需要用户触摸。另外,只要你打开Today View(哪怕只是滑动到这个页面,没碰Widget),系统也会触发Widget的刷新流程。而和宿主App的通信,比如数据同步通过App Groups的话,也不需要触摸操作;只有点击Widget跳转宿主这种场景,才需要物理触摸。
内容的提问来源于stack exchange,提问作者Stephen




