I see a lot of apps that use GPS in the iPhone have the following warning in the App Description:
Warning: Continued use of GPS running in the background can dramatically decrease battery life.
If an App uses the background processes (like startMonitoringSignificantLocationChanges or Region Monitoring) Apple suggested that the battery life would not be affected significantly. So if I use these background location services, do I still have to have this warning in my App Description?
Is there any guideline from Apple for this? What do people generally use as a "Best Practice"
Thanks,
Mark
Take a look at this:
http://answers.oreilly.com/topic/325-how-to-effectively-use-core-location-in-your-iphone-app/
Usually, you don't want to update the user's location until you REALLY need it, or the app will only be running for a few minutes (like the app to find your parked car).
Related
I want to develop one application which should be monitoring how much application is running on how much time on my I-Phone Device(including internet browsers).
Please share your idea regarding this post.
little similar like this:
https://itunes.apple.com/us/app/system-manager/id455736462?mt=8
thanks
You really can't since Apple has placed very restrictive guidelines on Apps for iOS.
Although with some low level call you might get some running process information.
Because of the sandbox environment you might not be abele to much more information then that.
Also app's in background are suspended if they have no background running flaggs (voip, audio, location or accessory). Also if the system gets low on memory app that are suspended get killed and there memory freed up.
What you can do:
Try the List of All Processes OS X code which
Can we retrieve the applications currently running in iPhone and iPad
But keep in mind the restiction placed on you app by Apple: The iOS Environment, thus that there are app availble in the appstore that do what you want does not mean that you app will be allowed.
I know with ios 4 it is possible to run application in background as per this documentation
http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/BackgroundExecution/BackgroundExecution.html
this documents states that if application updates user's current location in background continuously then it is possible to run it in background.but is it necessary that we have to use only CLLocationManager for updating current location?can we user other apis like google latitude apis for updating current location?then also it is possible that application is able to run in the background forever?
As far as I understand from the document you posted, if you define the UIBackgroundModes with a value of location in your info.plist, "the system should allow the application to run as needed in the background". So, the first answer is yes, the application can run in the background and it will run indefinitely (up to battery life). This could be easily checked, actually.
Anyway, it seems to me that this kind of functionality is "reserved" to GPS-like apps and that Apple is really concerned about its usage:
For applications that require more precise location data at regular intervals, such as navigation applications, you need to declare the application as a continuous background application. This option is available for applications that truly need it, but it is the least desirable option because it increases power usage considerably.
so, I understand that Apple will screen really thoroughly all apps that activate this mode in order to assess if they really need the continuous update or do not (and in this case, possibly, the app would not be let in into the App Store).
Now, to answer the second part of your question, I think that one way that Apple will know if your app really complies with the rules, is its usage of CLLocationManager. The risk is that if you use another service, then Apple could think when reviewing your app that you just need background time without needing to constantly update the location.
But this is just a guess...
I have developed an application for iPhone that runs in the background with GPS mode on. I need to ask the server if there are any new tasks for the user? Fir this purpose, I have added the code in the didUpdateToLocation method. Now the problem is that it consumes the battery very fast. Please guide me how to avoid the battery consumption. Also, I need to keep the location accuracy at best.
Also, is there any other way where I can communicate to the server even while the app is running in the background. Please help me, I will be really grateful.
It is impossible to get accurate location without using internal GPS in the current state of iPhone. Since essentially you are keeping the GPS alive during the running of the app (not sure if Multitasking API allows GPS calling in background though), it would consume lots of battery power without doubt.
In this case, you either have to avoid calling GPS as much, or live with coarse locations from the cellar towers. You can't have both frequent GPS results and nice battery consumption.
Background: Workout App is designed to have a continuous timeline that I can then input what exercise and reps I'm doing in real-time, then graph the results in real-time.
Issue: When the iphone sleeps for too long, we lose the continuity of the Timeline and it restarts. We haven't figured out how to keep the timeline updating while the App is sleeping. I've asked him to do a call to the Iphone internal clock and do the math on where the viewer should be and move them to that point on the timeline. However, he can't figure out how to do this.
Solutions: Have you folks heard of anyways to do this call to the internal clock? Perhaps a better question, can you think of another way around the problem in general?
You could try CACurrentMediaTime which returns mach_absolute_time in seconds. This should be accurate across sleep.
There is no certain way that can assure you app will be running in the background for ever. (If this is what you need)
Even Steve said is Multitasking, iPhone resources are very limited and this means that your app will might be killed while it is in the background without any kind of notification.
(Except by the notification you get when entering the background)
The best thing you can do is low your resource usage. (release as many objects as possible)
Because when the system needs memory it will start killing apps in the background starting by the app that uses more resources.
If you are implementing streaming protocols then is different.
Hope this helps
I'm currently testing the latest iOS4 Feature to put my location aware app in the background. Well, it does work! But on the other hand it's quite hart to handle the immense power usage.
The app consumed about 50% battery power in the last four hours. It read the entire official documentation by Apple on this topic but I'm still not sure which parts of my application are still running and which functionality is suspended (beside the UI Drawing, which should be clear).
I don't use any real boilerplate code but extended libraries like ASIHTTPRequest to talk to my webservice. Tests with a friends car did you show that the Network Connectivity and and the Location Services is still running when I'm using i.e.
[locationManager startMonitoringSignificantLocationChanges];
Apples Documentation on the different application states
Background: The application is in the background and executing code
[...]
Should I write a "bare metal" functions to receive and send this location data? Should I remove all other objects for the time the application resides in the background to reduce the memory footprint? It seems there isn't any best practice yet.
Any ideas? Maybe you guys can provide me with some of your insights. Thanks.
Edit:
There's a new Instruments tool called Energy Diagnostics Instruments to record any power usage (for iPhone 3GS and later) with an attached device. Also there's another service on the device in the Settings App -> Developer -> Power Usage. It's great to test your power usage in field. The created logs can be pulled later in instruments.
Reference: WWDC 2010 Session 309 - Advanced Performance Analysis with Instruments
Sounds like your app is transmitting location data over the cellular network. Turning on the cellular radio is one of the most rapid causes of power drain, especially if the user has a weak signal connection to the cell tower.
You might want to save and package up a bunch of location data, and send the data in a quick burst as seldom as possible (twice per day, when the user stops moving for 30 minutes, only after the user gets to one of their favorite restaurants, etc.) Turning on the radio less than half as often could get you close to doubling the battery life (unless the user is doing something else with the device as well).