什么能带来最佳表现;共享首选项文件还是SQL数据库?

时间:2016-06-15 07:01:53

标签: android performance sqlite sharedpreferences

为了保存实际的警报,我认为一个小的私有sql数据库就足够了,我之前用它来保存数据。但是,我无法帮助,但认为创建数据库需要很多功能所以我可以使用共享首选项文件,只需使用几个链表或其他东西来为每个警报存储一些参数。这将占用更少的空间。

但这让我想到了,实际上最喜欢的方式是什么?我的意思是性能,严重性,安全性以及需要实现共享首选项文件或SQL数据库的工作量。

2 个答案:

答案 0 :(得分:2)

以下是我认为的优点和缺点:

共享首选项 - 用于存储键 - 值对。数据保存在私有文件中。没有结构化数据的概念,没有标准化的查询。写入/读取执行磁盘I / O操作,因此不是超快。

SQLite - 用于存储结构化数据。 db存储为私有文件。用于查询的SQL。性能与Shared Prefs类似。

我不会将Shared Prefs用于任何更复杂的数据。如果将对数据集执行搜索,那么SQLite就不费吹灰之力了。数据库的大小仅取决于所使用的数据量。如果您对存储的内容以及存储方式很了解,那么您不应该看到数据库失控。

答案 1 :(得分:1)

AFAIK SharedPreferences总是能够更快地访问数据和优化存储。即使是代码也很容易实现。

我会建议您的方案。 为了报警你几乎不需要4个属性。

  • 时间
  • 说明
  • RepeatMode
  • 暂停

    编译'com.google.code.gson:gson:2.3.1'

<强> Alarm.java

class Alarm{
  private String desc;
  private Date time;
  private boolean snooze;
  private int repeat; // 1 - daily ,2- monthly ,3 - yearly ,4 - none
}

检索警报

import java.lang.reflect.Type; 
Gson gson = new Gson(); 
Type type = new TypeToken<List<Alarm>>(){}.getType();
List<Alarm> alarms = gson.fromJson(preferences.getString("alarm",""), type);

添加警报

Gson gson = new Gson();
List<Alarm> alarms = new ArrayList<>();
alarms.add(new Alarm()); // adding alarm
String jsonAlarm = gson.toJson(alarms); //coverting list to json and saving back
editor.put("alarm",jsonAlarm);
editor.commit();