Skip to content

Most visited

Recently visited


Optimizing User-Initiated Network Use

Quick handling of user requests helps ensure a good user experience, especially when it comes to user actions that require network access. You should prioritize low latency over power conservation to provide the fastest response when optimizing network use that is a direct result of user actions. Attaining an optimal network traffic profile for your app, while making sure that your users get fast responses, can be a bit challenging.

This lesson teaches you how to optimize network use for user-initiated actions and reduce battery consumption.

Pre-fetch Network Data

Pre-fetching data is an effective way to reduce the number of independent data transfer sessions that your app runs. With pre-fetching, when the user performs an action in your app, the app anticipates which data will most likely be needed for the next series of user actions and fetches that data in bulk. Battery power consumption is reduced for two reasons:

Tip: To explore whether your app might benefit from pre-fetching, review your app's network traffic and look for situations where a specific series of user actions almost always results in multiple network requests over the course of the task. For instance, an app that incrementally downloads article content as a user views it might be able to pre-fetch one or more articles in categories the user is known to view.

Watch the video on effective pre-fetching which describes what pre-fetching is, where to use it, and how much data to pre-fetch. For more details, see Optimizing Downloads for Efficient Network Access.

Check for Connectivity or Listen for Changes

Searching for a cell signal is one of the most power-draining operations on a mobile device. Your app should always check for connectivity before sending a user-initiated network request. If you use a scheduling service, Schedulers do this automatically for you.

A best practice for user-initiated traffic is to first check for a connection using Connectivity Manager, and if there is no connection, schedule the network request for when the connection is made. Schedulers will use techniques such as exponential backoff to save battery, where each time the attempt to connect fails, the scheduler doubles the delay before the next retry.

Note: To check for connectivity for app-initiated traffic, see Optimizing App-Initiated Network Use.

Reduce the Number of Connections

In general, it's more efficient to reuse existing network connections than to initiate new ones. Reusing connections also allows the network to more intelligently react to congestion and related network data issues. For more information on reducing the number of connections used by your app, see Optimizing Downloads for Efficient Network Access.

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields


Follow Google Developers on WeChat

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience. (April 2018 — Developer Survey)