Android中一些常用来持久化存储的方法

在安卓SDK中有许多机制可以用来保存数据,决定使用哪一种和何时触发该操作常让人困惑。 当创建个人应用程序的时候你想要做的第一件、最容易的事就是保存一些用户输入的、明确需要保存的数据。下面是一些常用来持久化存储的方法:(附Android应用开发入门教程

数据保存最基本的方法就是保存到外置存储设备的文件上。这种存储可以被用户和所有的应用程序获得,当设备当作外置存储挂在的时候也可以看到。即使
你的应用卸载了该文件也会一直保留,除非你用GetExternalFileDir方法获得保存文件的文件夹。这最适用于被用户编辑过的文件,即使应用卸
载了也最好一直保留着,例如图片和文档。

你也可以把文件保存为内部存储,这对于你的应用程序是私有的。这种情况下,用户和其他应用程序都得到这些文件,并且当你应用卸载的时候文件将被删除。这最适用于保存一些简单的数据,避免了处理数据库的开销。

另外,你也可以把用户的配置保存成
键/值对,使用Preference API来创建SharedPreferences文件。你可以创建一个PreferenceActivity或者包含
PreferenceFragment的Activity保存参数配置,他们的布局中都有Preferences
对象来代替View对象。
 
最后,如果你要保存的数据结构很复杂,每个应用都有自己的私有的SQLLite数据库来保存数据。如果你的应用被卸载,这些数据也将被销毁。

另外,有些情况需要保存应用程序的当前状态,因为某个事件被触发。例如:

当设备被旋转的时候,当前的Activity被重新创建,布局也被调整。
当你的应用被用户或者其他应用放到后台去运行的时候,例如手机接到一个电话。另外,用户打开了应用程序的另一个Activity,当前的Activity也会被放到后台。任何在后台运行的Activity当内存不足的时候都可能被回收,当需要的时候再被重新创建。当用户明确地关闭了应用。

以上的情况,你都需要持久化保存用户输入的数据。当Activity被放到后台或者在销毁的过程中,onPause方法总是被调用,紧接着是
onStop即使UI被完全隐藏。所以最好在OnPause方法中保存数据。随后,当用户再次接触之前的Activity,如果它仍在内存中
onRestart,onstart和onResume方法将被调用,如果已经被回收了就需要被重新常见,那么onCreate、onStart、和
onResume将被调用。所以如果你想在所有情况下都再次显示之前的数据,你应该在onResume方法中恢复UI。

如果不需要永久的保存数据而只想保存UI的状态,你可以在onSaveInstanceState方法中把数据保存在Bundle中。该方法不能用
来保存数据,因为它不是Activity生命周期的一部分,仅仅当Activity需要重新创建或者被放到后台的时候被UI事件触发,被永久销毁的时候该
方法不被调用。所以它仅用于保存一些暂时性View状态。有些数据已经被安卓SDK保存了,但你可能需要保存些额外的信息,例如,假如你有些自定义的控
制,当用户按返回键回到Activity的时候,UI的状态需要被恢复,如果Activity仍在内存中,保存有状态信息的bundle对象可以在
onRestoreInstanceState方法中获得,如果Activity被回收了需要重新创建,可以在onCreate方法中获得bundle对象。

更多相关内容,尽在e良师益友网

时间: 2024-10-29 15:29:04

Android中一些常用来持久化存储的方法的相关文章

Android中StatFs获取系统/sdcard存储(剩余空间)大小

package com.orgcent.util; import java.io.File; import android.os.Environment; import android.os.StatFs; public class MemoryStatus { static final int ERROR = -1; /** * 外部存储是否可用 * @return */ static public boolean externalMemoryAvailable() { return andr

Android中设置文本颜色的三种方法及颜色大全

原文:Android中设置文本颜色的三种方法及颜色大全 源代码下载地址:http://www.zuidaima.com/share/1550463694572544.htm 1.利于系统自带的颜色类 如TextView1.setTextColor(Android.graphics.Color.RED); 2.数字颜色表示法 TextView1.setTextColor(0xffff00ff); 3.自定义颜色 TextView1.setTextColor(this.getResources().

android中保存一个ArrayList到SharedPreferences的方法

保存: public static boolean saveArray() { SharedPrefernces sp=SharedPrefernces.getDefaultSharedPrefernces(this); SharedPrefernces.Editor mEdit1= sp.edit(); mEdit1.putInt("Status_size",sKey.size()); /*sKey is an array*/ for(int i=0;i<sKey.size()

Android中的常用命令汇总

工欲善其事必先利其器,在Android开发过程中,为了开发调试,查找问题的需要,必须掌握一些常用的命令的用法,这里总结了一些在Android开发中经常会用到的命令,一共15个. 1.ps 列出所有的进程 这个命令是Android调试和问题查找的时候经常会用到的一个命令,在不带参数的情况下会输出所有的进程, ps -t 则会输出所有的线程. 2.printenv    显示环境变量,例: printenv HOSTNAME printenv BOOTCLASSPATH 3. setprop  设置

Android高手之路之Android中Intent传递对象的两种方法Serializable,Parcelable

注:本文改编自Android_Tutor的文章,原文地址:http://blog.csdn.net/android_tutor/article/details/5740845 Android中的传递有两个方法,一个是Serializable,另一个是Parcelable. Serializable是J2SE本身就支持的.而Parcelable是Android所特有的. 二者的使用场景和区别: 1)在使用内存的时候,Parcelable比Serializable性能高,所以推荐使用Parcelab

Android高手进阶教程(十七)之---Android中Intent传递对象的两种方法(Serializable,Parcelable)!

[转][原文] 大家好,好久不见,今天要给大家讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putParcelable(Key, Object);当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable接口,为了让大家更容易理解我还是照常写了一个简单的Demo,大家就一步一步跟我来吧! 第一步:新建一个andr

Android中Intent传递对象的两种方法(Serializable,Parcelable)

今天要给大家讲一下Android中 Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是 Bundle.putParcelable(Key, Object);当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable接口,为了让大 家更容易理解我还是照常写了一个简单的Demo,大家就一步一步跟我来吧! 第一步:新建一个Android工程命名为Object

(六十四)Android中Intent传递对象的两种方法(Serializable,Parcelable)

转载自:http://blog.csdn.net/android_tutor/article/details/5740845 大家好,好久不见,今天要给大家讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putParcelable(Key, Object);当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable

Android中滑屏初探 ---- scrollTo 以及 scrollBy方法使用说明

本文原创 ,转载必须注明出处 :http://blog.csdn.net/qinjuning 今天给大家介绍下Android中滑屏功能的一个基本实现过程以及原理初探,最后给大家重点讲解View视图中scrollTo 与 scrollBy这两个函数的区别 . 首先 ,我们必须明白在Android View视图是没有边界的,Canvas是没有边界的,只不过我们通过绘制特定的View时对 Canvas对象进行了一定的操作,例如 : translate(平移).clipRect(剪切)等,以便达到我们的