Android - 数据的存储

Android中的数据存储有以下几种方式:

  1. 文件存储
  2. SharedPreferences
  3. SQLite数据库
  4. Content Provider

文件存储

Activity中的openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在JavaSE 环境中保存数据到文件中是一样的。
openFileInput()方法则用于读取当前应用的保存的数据

openFileOutpupt详解

openFileOutput(String name, int mode)
name - 指定文件名称,不能包含路径分隔符“/” ,如果文件不存在,Android 会自动创建它。创建的文件保存在/data/data//files目录,如: /data/data/net.yrom.xxx/files/xxx.txt
mode - 文件操作模式,即访问权限

0 或者MODE_PRIVATE 默认的模式,文件为私有的,只能本应用程序才能访问;
MODE_APPEND 添加默认,数据将追加到文件末尾;
MODE_WORLD_READABLE 全局可读;!危险
MODE_WORLD_WRITEABLE 全局可写。!危险

eg.

1
2
3
4
5
6
7
8
9
public class FileActivity extends Activity {
//...
public void save2File(byte[] data, String filename) {
//...
FileOutputStream out = this.openFileOutput(filename, Context.MODE_PRIVATE);
out.write( data);
out.close();
}
}

获得应用的文件存储路径

getFileDir() - /data/data/<当前应用包名>/files/
getCacheDir() - /data/data/<当前应用包名>/cache/
Environment.getExternalStorageDirectory() - 用于获取SDCard的目录,
注意:

  1. 写数据应在程序清单文件中加入sdcard的访问权限:
    android.permission.WRITE_EXTERNAL_STORAGE
  2. 先判断sdcard是否挂载:
    Environment.getExternalStorageState() 应返回 Environment.MEDIA_MOUNTED
    eg.获取sdcard的可用大小:
    1
    2
    3
    4
    5
    6
    7
    8
    if(Environment.getExternalStorageState().equals(Environment. MEDIA_MOUNTED)){
    File sd = Environment. getExternalStorageDirectory();
    StatFs stat = new StatFs(sd.getPath());
    long availableBlocks = stat.getAvailableBlocks();
    long blockSize = stat.getBlockSize();
    long availableSize = availableBlocks * blockSize;
    String totalAvailableSize = Formatter.formatFileSize(getApplicationContext(), availableSize);
    }

    SharedPreferences

    Android应用一般采用SharedPreferences来存储于应用相关的配置参数
    其实就是 /data/data/<package name>/shared_prefs/ 目录下的xml文件

Android - Activity

Android组件:Activity、Service、Broadcast Receiver、Content Provider

Activity

Android中的Activity有四个基本状态:

  1. Actived/Runing 一个新的Activity被启动,处于Activity任务栈栈顶,显示在屏幕最前端,此时它处于可见并可和用户交互的激活状态。
  2. Paused 被另一个透明或者 Dialog 样式的 Activity 覆盖时的状态。仍然可见,但已失去焦点,不能与用户交互
  3. Stoped 被另一个Activity覆盖、不可见、失去焦点的状态。
  4. Killed/Destoryed 被系统回收,Activity实例被销毁

这些状态之间转换都依赖于用户的操作。程序员可以决定一个Activity何时启动,但不能决定它何时被销毁。

Activity生命周期方法

在android.app.Activity类中定义了一系列生命周期相关的方法,在应用自定义的Activity中只要复写了这些方法中所需的,就可以确保被android系统调用到。
Activity生命周期