I'm a developer, and I can confirm that this problem is from iOS itself, not about any app else.
No matter what you did, factory reset, reboot, reinstall all the apps, it's just not working.
And it's absolutely not about any hardware issue.
iOS tends to stop running anything if the app is in the background.
That's why it needs a background permission.
Before Apple introduced the BGScheduleTask, there's no long running task can be running in the background.
We only have a few seconds(maybe 30s? never use it before.) to do the jobs.
If you never explicitly tell iOS you need to run background tasks, then all of your thread will be stopped after 3 seconds.
Nothing will be running in the background.
If so, why is there so many apps draining battery?
Just like my app, I didn't do any background tasks at all, but it still shows that my app is running in the background for several hours, that's insane.
To figure it out, I put a `print` in a looper on a worker thread. Guess what? It stopped printing after 3 seconds.
So nothing is really running in the background.
But the weird thing is that it did show some activities in the Time Profiler.
It needs time to look into it.
And Apple should be responsible for this issue.
I also tried the way iCulture did. But the traitCollectionDidChange never get called in my case.