Which Android Data Storage Technique to use? Which Android Data Storage Technique to use? android android

Which Android Data Storage Technique to use?


Different Storage options in Android

enter image description here


Content Providers

enter image description here

  • Consider the structured data added to the device from application1 isnot accessible to another application2 present in the same device butthe profile photo added to the device by application1 is available tothe application2 running in the same device

  • Consider android device as a city, the applications in it are thehouses in the city, people in the houses(application) are the data.Now content provider is like an broker in the city(android device).This broker provide access for the people in the city for findingdifferent houses referring as the content provider in the androiddevice provide access for the data in the device for differentapplications.


Shared Preferences

enter image description here

  • Consider I have an App say a Face book App which I use to log in tomy account.

  • Now the very first time I enter my username and password to getaccess to my account. Say I log out of the application an hour lateragain I use the same Face book App to login again to my application.

  • I have to enter username and password again to login to my accountand I set a theme to my application and other settings on how my applooks in my current phone

  • This is un-necessary because consider I am using my phone to login tothe application. So I will always use my phone to login again andagain, thus entering my credentials again and again is more workshows it’s not a user friendly app

  • Shared Preferences is very handy in such scenarios where I can useits feature to share my data in a xml file Which physically exists inthe Android app installed in my phone which is not destroyed even ifthe app is closed. Here we can save user preferences data of thecurrent application.

  • As a result next time I open my app in my phone I can see the dataautomatically filled in the necessary fields and the settings are


File Storage

enter image description here

  • In Android we can use the device storage space to store the data init for the applications. The type of data involves things such as atext file, image file, video file, audio file etc.

  • As seen in the figure as we can see that there are two places we cando this. One way is to write the raw files into primary /secondarystorage. Another way is to write the cache files into theprimary/secondary storage.

  • There is also difference between storing raw data and the cache data,the raw data once stored in memory by user has to be explicitlydeleted by the user explicitly otherwise it would exist till then.Cache data stored in memory is not a permanent data because thesystem automatically deletes it if it feels there is shortage ofmemory.

enter image description here

Internal Storage:

  • Consider a user in an application has stored data in internalstorage, then only that user of that application has access to thatdata on the mobile and that data is automatically deleted when theuser uninstalls the application. Speaking of which internal memory isprivate.

  • The apps internal storage directory is stored using the name packagename in a special place in the android file system.

  • Other apps or users of current app have no access to the file set bya particular user and a particular app unless it is explicitly madeavailable to the user for readable/writable access.

enter image description here


SQLite

enter image description here

  • Sqlite is used to store more structured data locally in a mobilewhere the android app is running. Structured data involves as ofwhich shown in the figure like a student’s information in the form ofrows and columns.

  • Sqlite offers similar functionality like Mysql and oracle but withlimited functional features. Some of the things involve performingquery operations on tables. There are features though like creatingviews but also some features are not available like stored procedure.

  • Sqlite is very helpful in storing complex and large data which can bedownloaded once and can be used again and again until the applicationis running. When the application is closed the sqlite database isalso destroyed.


Putting all the pieces together

enter image description here


  • Shared preferences are good for storing ... an application's preferences, and other small bits of data. It's a just really simple persistent string key store for a few data types: boolean, float, int, long and string. So for instance if my app had a login, I might consider storing the session key as string within SharedPreferences.
  • Internal storage is good for storing application data that the user doesn't need access to, because the user cannot easily access internal storage. Possibly good for caching, logs, other things. Anything that only the app intends to Create Read Update or Delete.
  • External storage. Great for the opposite of what I just said. The dropbox app probably uses external storage to store the user's dropbox folder, so that the user has easy access to these files outside the dropbox application, for instance, using the file manager.

  • SQLite databases are great whenever you are going to use a lot of structured data and a relatively rigid schema for managing it. Put in layman's terms, SQLite is like MySQL or PostgreSQL except instead of the database acting as a server daemon which then takes queries from the CGI scripts like php, it is simply stored in a .db file, and accessed and queried through a simple library within the application. While SQLite cannot scale nearly as big as the dedicated databases, it is very quick and convenient for smaller applications, like Android apps. I would use an SQLite db if I were making an app for aggregating and downloading recipes, since that kind of data is relatively structured and a database would allow for it to scale well. Databases are nice because writing all of your data to a file, then parsing it back in your own proprietary format it no fun. Then again, storing data in XML or JSON wouldn't be so bad.

  • Network connection refers to storing data on the cloud. HTTP or FTP file and content transfers through the java.net.* packages makes this happen.


SharedPreferences is mainly for application-specific settings that you can access via your Settings menu - like application settings. It's a good idea to keep everything simple here - mostly boolean flags, short strings, or integers. SharedPreferences data persist on device reboot, and are removed along with app uninstallation. Data is saved as a key-value pair.

Internal Storage is mostly used for larger non-persistent data storage. You utilize internal storage if you want to process an image, a short video clip, a large text file, etc. But you don't store the processed data in the internal storage - its function is more like a CPU's RAM. The amount of available internal storage for your application depends on the device, but it's always a good idea to keep anything under 1MB. Data is referenced via its file path.

External Storage does not only refer to the SDCard storage, but for higher-end phones, this can mean internal mountable storage (like in the Galaxy Nexus or S2). This is where you store the large video files, the high-resolution images, and the 20-megabyte text file you want to parse in your application. This is also a place to store data that you want shared across devices if you swap sd cards. Data is also referenced via its file path.

SQLite Databases is where you'd store pretty much anything you want in a regular database - with the advantage of organizing things into tables, rows, and columns. It works best with things that you want displayed in the UI as lists - the best example would be the great invention knows as the CursorAdapter. Data stored here also persist on device reboot, and are removed with app uninstallation. You can also share data across applications with sqlite db if you hook it up to a ContentProvider. Data is accessed using a Cursor, where you can call methods as if you're executing sql statements.

Network Connection is not really a data storage technique, but can be a way of persisting data for a specific user provided the device is connected to the internet, using some sort of authentication. You have to balance out between downloading data every time the app needs it, or having a one-time data sync, which would ultimately lead to another of the storage options mentioned above.