使用哪种Android数据存储技术?

时间:2012-04-03 03:32:27

标签: java android sqlite sharedpreferences data-storage

Android文档在下面有以下选项,但没有解释每种情况最适合的情况。每种方法的优缺点是什么?例如在什么条件下SQL会比共享偏好更好?

  • 共享偏好设置
  • 内部存储
  • 外部存储
  • SQLite数据库
  • 网络连接

4 个答案:

答案 0 :(得分:100)

Android中的不同存储选项

enter image description here


内容提供商

enter image description here

  • 考虑从application1添加到设备的结构化数据 不能访问同一设备中存在的另一个应用程序2但是 application1添加到设备的个人资料照片可供使用 运行在同一设备中的application2

  • 将android设备视为一个城市,其中的应用程序是 在城市的房子,房子里的人(应用程序)是数据。 现在内容提供商就像城市中的经纪人(android设备)。 这个经纪人为城市中的人们提供了查找的权限 不同的房子称为android中的内容提供者 设备为设备中的数据提供访问权限 应用


共享首选项

enter image description here

  • 考虑我有一个应用程序说我用来登录的Face Book App 我的帐户。

  • 现在我第一次输入我的用户名和密码了 访问我的帐户。假设我一小时后退出应用程序 我再次使用相同的Face Book App再次登录我的应用程序。

  • 我必须再次输入用户名和密码才能登录我的帐户 我设置了一个主题到我的应用程序和其他设置我的应用程序 看着我当前的手机

  • 这是不必要的,因为我认为我正在使用手机登录 应用程序。所以我会一直用我的手机再次登录 再次,因此一次又一次地输入我的证书是更多的工作 显示它不是一个用户友好的应用程序

  • 共享首选项在我可以使用的场景中非常方便 它的功能是在xml文件中共享我的数据 安装在手机中的Android应用程序,即使是,也不会被破坏 该应用已关闭。在这里我们可以保存用户偏好数据 目前的申请。

  • 结果下次我在手机中打开我的应用程序时,我可以看到数据 自动填写必要的字段,设置为


文件存储

enter image description here

  • 在Android中,我们可以使用设备存储空间来存储数据 它适用于应用程序。数据类型涉及诸如a之类的事情 文本文件,图像文件,视频文件,音频文件等。

  • 如图所示,我们可以看到有两个地方可以 做这个。一种方法是将原始文件写入主/辅助文件 存储。另一种方法是将缓存文件写入 主要/次要存储。

  • 存储原始数据和缓存数据之间也存在差异, 一旦用户存储在内存中的原始数据必须是明确的 由用户明确删除,否则它将存在直到那时。 存储在内存中的缓存数据不是永久数据,因为 如果感觉不足,系统会自动删除它 存储器中。

enter image description here

内部存储:

  • 考虑应用程序中的用户已将数据存储在内部 存储,然后只有该应用程序的用户才能访问该存储 移动设备上的数据以及当数据被自动删除时 用户卸载应用程序。说到哪个内部存储器 私有的。

  • 使用名称包存储应用程序内部存储目录 在android文件系统的特殊位置命名。

  • 当前应用的其他应用或用户无权访问该文件 特定用户和特定应用,除非明确制作 用户可以进行可读/可写访问。

enter image description here


SQLite的

enter image description here

  • Sqlite用于在移动设备中本地存储更多结构化数据 Android应用程序正在运行的位置。结构化数据涉及到 在图中显示的像学生的信息形式 行和列。

  • Sqlite提供类似的功能,如Mysql和oracle但有 功能有限。有些事情涉及表演 对表的查询操作。虽然有创造的功能 视图,但也有一些功能不像存储过程。

  • Sqlite非常有助于存储复杂的大数据 下载一次,可以一次又一次地使用,直到申请 在跑。当应用程序关闭时,sqlite数据库就是 也被毁了。


将所有部分放在一起

enter image description here

答案 1 :(得分:36)

  • 共享首选项适用于存储应用程序的首选项和其他少量数据。对于一些数据类型,它是一个非常简单的持久字符串键存储:boolean,float,int,long和string。因此,例如,如果我的应用程序有登录名,我可能会考虑将会话密钥存储为SharedPreferences中的字符串。
  • 内部存储适用于存储用户不需要访问的应用程序数据,因为用户无法轻松访问内部存储。可能适用于缓​​存,日志和其他东西。任何只有应用程序打算创建读取更新或删除的内容。
  • 外部存储空间。与我刚才所说的完全相反。 Dropbox应用程序可能使用外部存储来存储用户的Dropbox文件夹,以便用户可以轻松访问Dropbox应用程序之外的这些文件,例如,使用文件管理器。

  • 每当您要使用大量结构化数据和相对严格的架构来管理它时,
  • SQLite 数据库都很棒。换句话说,SQLite就像MySQL或PostgreSQL,而不是作为服务器守护程序的数据库,然后从CGI脚本(如php)获取查询,它只是存储在.db文件中,并通过一个简单的库访问和查询在申请中。虽然SQLite无法像专用数据库那样扩展,但对于像Android应用程序这样的小型应用程序来说,它非常快捷方便。如果我正在制作一个聚合和下载配方的应用程序,我会使用一个SQLite数据库,因为这种数据是相对结构化的,数据库可以很好地扩展。数据库很不错,因为将所有数据写入文件,然后以您自己的专有格式将其解析回来并不好玩。然后,以XML或JSON格式存储数据也不会那么糟糕。

  • 网络连接是指在云端存储数据。通过java.net。*包进行HTTP或FTP文件和内容传输可以实现这一点。

答案 2 :(得分:16)

SharedPreferences 主要用于您可以通过“设置”菜单访问的特定于应用程序的设置 - 例如应用程序设置。这里保持一切简单是个好主意 - 主要是布尔标志,短字符串或整数。 SharedPreferences数据在设备重启时仍然存在,并随应用程序卸载一起删除。数据保存为键值对。

内部存储主要用于较大的非持久性数据存储。如果您想处理图像,短视频剪辑,大型文本文件等,则可以使用内部存储。但是您不将处理后的数据存储在内部存储中 - 它的功能更像是一个CPU的RAM。应用程序的可用内部存储量取决于设备,但始终保持1MB以下的容量始终是个好主意。数据通过其文件路径引用。

外部存储不仅指SDCard存储,而且对于高端手机,这可能意味着内部可安装存储(如Galaxy Nexus或S2)。您可以在此处存储大型视频文件,高分辨率图像以及要在应用程序中解析的20 MB文本文件。如果您交换SD卡,这也是存储您希望跨设备共享的数据的位置。数据也通过其文件路径引用。

SQLite数据库是您在常规数据库中存储您想要的任何内容的好处 - 具有将内容组织到表,行和列中的优势。它最适合您希望在UI中显示的列表 - 最好的例子是伟大的发明作为CursorAdapter。此处存储的数据也会在设备重启时保留,并在卸载应用时删除。如果将其连接到ContentProvider,您还可以使用sqlite db在应用程序之间共享数据。使用Cursor访问数据,您可以在其中调用方法,就像执行sql语句一样。

网络连接实际上并不是一种数据存储技术,但如果设备连接到互联网,则可以使用某种身份验证的方式为特定用户保留数据。您必须在每次应用程序需要时下载数据或进行一次性数据同步之间取得平衡,这最终会导致上述另一种存储选项。

答案 3 :(得分:4)

共享首选项是键/值对,仅此而已。因此,如果你想跟踪说,学生和他们的考试成绩,它真的不会很好。

数据库只是一个数据库。您可以根据需要定义任意数量的列(和表)来完成工作。

如果它是您的应用程序的首选项,请使用共享首选项(几乎任何我能想到的首选项都可以这样做),如果它更复杂,请使用数据库。