1. A method to communicate data in a mobile application, comprising: specifying in the mobile application a program intent and one or more course or fine-grained properties of data objects in terms of tolerance to delay and loss; providing a Mobile Application Programming Interface (API) for writing apps for mobile devices that allows an application to specify the course or fine-grained properties of data objects in terms of their tolerance to delay and loss and to handle asynchronous events generated as a result of a data item being transferred or lost, if a notification is desired by the application; using a network transfer protocol between a mobile device and a cloud service to coalesce intents of multiple applications for individual data objects or for and aggregate and to decide on a transfer policy for a set of data objects based on application intent; capturing factors including network type, network characteristics, server load, and system-wide metrics of interest for the network transfer protocol to determine a schedule of when and what data objects to transfer; performing optimizations to efficiently transfer data based on type of data and system-wide parameters and creating a window of opportunity through delay to pack data objects into a single transfer with opportunities for applying deduplication and compression; dynamically setting a delay in a fine-grained manner on individual collections of data by a mobile app; providing client-side software on the mobile device for the API and the client-side component of the network transfer protocol and a server-side software running as a cloud service that implements a server-side component of the network transfer protocol, wherein the server side software mirrors the client-side software for delay and loss tolerant data transfer for the downstream traffic to transfer data from server to client; and selecting a transfer policy for a set of data objects based on the application intent.