iOS Application Battery Optimization Techniques to Minimize Burden on Battery


iOS Application Battery Optimization

The obvious battery issue with an iPhone is we want it to last as long as we require it. Now with every passing year, although they are shipped embedded with high-end processors, better display with higher resolution but the progress in terms of battery technology is not at par. Before getting any deeper let me tell you that there are two factors that need to be taken care of parallel or optimized together for experiencing the best phase of your iPhone battery life or any other apple device.

 

Even a little inaccuracy in apps can negatively impact the battery performance and responsiveness.Being an app developer it is your responsibility to use recommended APIs to enable the system to better decide how smartly manage the app and its resources. Do the batching to reduce the network operations to avoid the unnecessary updates for the user interface. Ensuring  Power-intensive tasks are under user control and the app is completely idle when not responding to user input is also a good approach to ensure the development of an app with maximum battery optimization.

 

 

Let us discuss steps to optimize the iPhone battery.

 

1. Pause the  Location Services When You Aren’t Using Them
Apart from the navigation apps that offer turn-by-turn directions, majority of apps don’t require location services to be on everytime. It is recommended to let them on till the location is fixed and soon turn them off. Standard location updates can be stopped using  stopUpdatingLocation method of the location manager object as below:

 

IN OBJECTIVE-C

 

-(void)getLocationUpdate {

 // Create a location manager object

 self.locationManager = [[CLLocationManager alloc] init];

 

 // Set the delegate

 self.locationManager.delegate = self;

 

 // Request location authorization

 [self.locationManager requestWhenInUseAuthorization];

 

 // Start location updates

 [self.locationManager startUpdatingLocation];

}

 

-(void)locationManager:(CLLocationManager *)manager

   didUpdateLocations:(NSArray *)locations {

 // Get a fix on the user’s location

 …

 

 // Stop location updates

 [self.locationManager stopUpdatingLocation];

}

 

IN SWIFT

func getLocationUpdate() {

   // Create a location manager object

   self.locationManager = CLLocationManager()

   

   // Set the delegate

   self.locationManager.delegate = self

   

   // Request location authorization

   self.locationManager.requestWhenInUseAuthorization()

   

   // Start location updates

   self.locationManager.startUpdatingLocation()

}

 

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

   // Get a fix on the user’s location

   …

       

       // Stop location updates

       self.locationManager.stopUpdatingLocation()

}

 

2. Smart Prioritization for Remote Notification Delivery
There are multiple elements contained within the remote notifications delivered by the server to Apple Notification Service like payload data, an expiration date and a priority. Notifications can be delivered immediately or can be scheduled for an energy-efficient time. Here using two levels of push priority you can you can decide which notification to be delivered instantaneously or need to be sent later.

 

iphone notification

image credit: imore.com

 

3. Discover those Services and Characteristics that You Actually Need
A peripheral usually has more than enough services to perform specific use case in an app. It is therefore, recommended to figure out the particular services and characteristics required by your app. This can be done using particular UUIDs to discover services: and discoverCharacteristics:forService: methods of the CBPeripheral class as below:

 

Discovering particular services

 

OBJECTIVE-C

// Look for services matching a specific set of UUIDs

[peripheral discoverServices:@[firstServiceUUID, secondServiceUUID]];

 

SWIFT

// Look for services matching a specific set of UUIDs

peripheral.discoverServices([firstServiceUUID, secondServiceUUID])

Discovering particular service characteristics

 

OBJECTIVE-C

// Look for characterstics matching a specific set of UUIDs for a given service

[[peripheral discoverCharacteristics:@[firstCharacteristicUUID, secondCharacteristicUUID]

 forService:interestingService]];

 

SWIFT

// Look for characterstics matching a specific set of UUIDs for a given service

peripheral.discoverCharacteristics([firstCharacteristicUUID, secondCharacteristicUUID], forService: interestingService)

 

4.Disconnect from the Device When You Don’t Need
To avoid your app from meaninglessly using the device’s radio simply disconnect it from a peripheral device if some characteristic is no longer providing notifications or even if the extra data is not required anymore. Cancel every notification subscriptions by passing a value of NO to the setNotifyValue:forCharacteristic: method of the CBPeripheral class. Now disconnect from the device by calling the cancelPeripheralConnection: method of the CBCentralManager class.

 

OBJECTIVE – C

// Unsubscribe from a characteristic value

[self.peripheral setNotifyValue:NO forCharacteristic:interestingCharacteristic];

 

// Disconnect from the device

[self.myCentralManager cancelPeripheralConnection:peripheral];

 

SWIFT

// Unsubscribe from a characteristic value

self.peripheral.notifyValue(false, forCharacteristic: interestingCharacteristic)

 

// Disconnect from the device

self.myCentralManager.cancelPeripheralConnection(peripheral)

 

Device Networking Overhead

Every iPhone app is involved in performing some sort of network operation and it is important to use them efficiently and avoid the unnecessary burden on the battery. In order to achieve this overhead cost need to be excluded as much as possible simply by reducing and scheduling transactions and employing the efficient APIs.

 

When the app is involved in any network operations it incurs a good amount of overhead cost. Networking hardware like cellular and Wi-Fi radios are powered down by default to conserve the battery. It will be good if these resources are powered up to perform the activity.

 

Networking Variable Effect on the Energy

 network optimizationimage credit : developer.apple.com

 

Multiple factors affect the amount of energy required to do the network operations on a device.

  1. Cellular network activity requires much more energy than performing an activity over Wi-Fi.

  2. Poor or fluctuation in signal conditions may result in slow or problematic transactions, which must be avoided.

  3. Low network throughput (bandwidth) means radios need to stay more than usual for performing the transactions.

  4. The geographic location and preferred cellular provider can affect the amount of energy consumption because signal conditions and throughput vary very often.

 

Limiting Graphics and Animations
Since the system APIs are designed to boost the energy efficiency hence, it content updates won’t be a concern if app uses only the standard windows and controls. In case app supports custom windows and controls it will be required to ensure the efficiency as if app tends to refresh the content more than required then it will result in unnecessary battery drain.

 

Guideline for content refresh optimization.

  1. Limit the number of views your app uses.

  2. Avoid using opacity especially for the content that changes frequently.

  3. Prefer only recommended frameworks while developing games. These frameworks are optimized to provide good performance.

graphic n animation

image credit: awwwards.com

 

5. Monitor and Restrict Background App Refresh Rate on Priority
Users can easily manage few energy related factors like screen brightness and active network hardware through device’s settings. They need to visit Settings > Battery to view the apps that have consumed the maximum energy recently. Now depending upon the app usage priority a user can disable the background app refresh.

ios battery usage

image credit:developer.apple.com

 

iOS apps are set to  automatic update and content download in the background. This feature although boost the usability of device but also hampers the battery life thereby enabling the apps to consume the cellular data in the background despite user is not active on the app. After disabling the background app refresh rate will restrict app to use data only  when you open it not when in the background.

 

Based on your personal priority decide which apps need background refresh rate. Simply go to Settings > General > Background App Refresh and disable the toggle next to the app to disable the “Background App Refresh” for apps as per your choice. This will substantially reduce battery usage.

background refresh rate batter

Image credit: howtogeek.com

 

Hopefully, these guidelines will help you in optimizing your iphone application for better battery management. By sticking to these approaches, you can make big contributions towards the overall energy efficiency and battery optimization of iOS platform as well as to the satisfaction of your users.

 

Being a big concern it’s the professional responsibility of an IT firm to ensure not only customized app on latest cutting edge technology to meet industry standards and make business objectives more than obvious but also to develop android apps that are optimized for minimum battery usage and a delightful user experience.

 

You may be interested in following:

  1. Android App: Battery Optimization Best Practices for Zero Compromise on Performance
  2. Apple Developer Account Creation Step by Step