android中的数据存储方式和应用场景

数据不管对于用户还是对于公司都是很重要的,所以数据的存储也是相当的重要。你试想一下,如果一个应用没有做数据存储,那将会何等的可怕?尤其是用户体验极差。
官方文档:https://developer.android.com/guide/topics/data/data-storage?hl=zh-cn

分类

1.sharedPreferences
2.文件存储(可分为内部和外部存储)
3.数据库存储
4.网络存储
而至于网上所说的contentProvider,这是Android提供的一种可将自己的隐私数据暴露出去的方法,而非真正的数据存储方式。

SharedPreferences

这是一种轻量级的存储方案,通常用于存储一些登陆的信息或者开关之类的键值对,它是将键值对保存到xml文件中,一般用于存放一些格式简单且少量的数据。

用法也很简单:

        // TODO 存储数据
//        SharedPreferences preferences = getPreferences(MODE_PRIVATE);
        SharedPreferences sp = getSharedPreferences("sp_file", MODE_PRIVATE);
        SharedPreferences.Editor edit = sp.edit();
        edit.putBoolean("login", true);
        edit.putString("login_name", "pioneerz");
        edit.apply();

        // TODO 获取数据
        boolean login = sp.getBoolean("login", false);
        String loginName = sp.getString("login_name", "");

注:不建议多进程间使用这种方式共享数据,这是不安全的。

文件存储

文件存储分为内部和外部存储。他的优势在于只要空间足够大,就可以存放大数据,而且也不限制格式。

1.内部存储通常是将数据存储在应用的私有目录下,比如通过openFileOutput打开或创建的文件会放在的应用的/data/data//files目录下。这些文件在应用被删除的时候也会跟着删除的,如果有root手机,可以直接通过adb命令去查看:


私有目录

用法:

public void writeCache(View view) {
        try {
            File file = new File(getCacheDir(), "cache_test");
            FileOutputStream fos = new FileOutputStream(file);
            fos.write("write cache".getBytes());
            fos.close();
            mTextView.setText("写入缓存成功");
        } catch (IOException e) {
            mTextView.setText("写入缓存失败,原因:"+e.getMessage());
        }
    }

    public void readCache(View view) {
        try {
            File file = new File(getCacheDir(), "cache_test");
            FileInputStream fis = new FileInputStream(file);
            int available = fis.available();
            byte[] result = new byte[available];
            fis.read(result);
            fis.close();
            mTextView.setText("读取缓存:"+(new String(result)));
        } catch (IOException e) {
            mTextView.setText("读取缓存失败,原因:"+e.getMessage());
        }
    }

上面使用cat命令查看文件的内容,得到的也是"Hello world".

2.外部存储通常是将数据存放到内置的sd卡或者外置的sd卡中。这些文件是不会随着应用的删除而删除,所以要注意管理。注意从6.0开始,访问外部存储是需要读写权限的(android.permission.WRITE_EXTERNAL_STORAGE),而且在存储数据之前是需要判断外部存储的状态是否可以可用。

/* Checks if external storage is available for read and write */
public boolean isExternalStorageAvailable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        return true;
    }
    return false;
}

至于代码就不写了哈!

数据库存储

数据库存储是目前很常见的一种存储,因为他不但可以存储数据,还提供的很方便的数据查询,更新,删除,插入,就是我们通常所说的crud, 也很高效。

使用:

public class DictionaryOpenHelper extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 1;
    private static final String DICTIONARY_TABLE_NAME = "dictionary";
    private static final String DICTIONARY_TABLE_CREATE =
                "CREATE TABLE " + DICTIONARY_TABLE_NAME + " (" +
                KEY_WORD + " TEXT, " +
                KEY_DEFINITION + " TEXT);";

    DictionaryOpenHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(DICTIONARY_TABLE_CREATE);
    }
}

其实现在有很多更"好"的数据库的框架,比如greendao,liteOrm等,用起来非常的方便,不像原始的那样的要自己去写命令去crud,他们只是简单的调用相应的函数就行,当然简单的同时是用性能作为牺牲的,而且是用久了,会造成开发者思维的固化,连最基础的sql语句都不太会了,当数据库出现问题,也没能力去排查问题了 。

网络存储

像浏览器中的书签同步和恢复:点击同步的时候,它是将数据打包存放到自己的服务器上的,以防止数据误删或者丢失,当用户点击恢复的时候,它会将服务器上的数据下载下来并显示。

你可能感兴趣的:(android中的数据存储方式和应用场景)