9
votes

I am developing an IOS app in objective c which displays the heart rate from bluetooth BLE with a corresponding graphic. If the app runs in the foreground everything forks fine without any problem.

But if the app goes in background mode the BLE measuring still continues (I am using "Uses Bluetooth LE accessories") but it is killed by the OS after some minutes or some seconds with the message "The app on iPhone quit unexpectedly --> Message from debugger: Terminated due to signal 9.

I can not find out why this happens only in background mode and not in the foreground when I see the app on the iPhone?

The CPU and memory usage is the same in foreground or background it is about 130% and 16 MB.

The app is killed after 2:40

enter image description hereenter image description here

1
This is because your application is using too much memory in the background so the operating system kills the application.SierraMike
But why does it only happens in the background mode? And 16 MB are not much isn't it?Ing. Ron
From my understanding, an application in the foreground has more memory allocated to the application than the application in the background. According to the operating system that is a lot of memory for an application in the background. Do you have any code you could show us of your background tasks?SierraMike
Also 130% CPU is pretty high for a foreground task, let alone a background task - given that you should be doing Bluetooth IO this implies that you have some other CPU bound loop - show some code or use Instruments to identify where your app is spending time.Paulw11
Use the time profiler in Instruments - raywenderlich.com/23037/how-to-use-instruments-in-xcode but it sounds like you need your code to be aware when it is the background and stop rendering the image.Paulw11

1 Answers

8
votes

"All things which are done in the foreground" are done when the app is in background mode and the app is using by example "Uses Bluetooth LE accessories"! And if the CPU usage is too high iOS kills the app with "Terminated due to signal 9" not only if the memory usage is too high! (I think, this fact is missing in the Apple documentation).

To prevent the app to be killed while in background, stop doing high CPU using things, like rendering images, when the app is in background mode!