首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用哪种Android数据存储技术?

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

Stack Overflow用户
提问于 2012-04-03 03:32:26
回答 4查看 29.1K关注 0票数 49

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

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

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-10-13 05:18:23

Android中的不同存储选项

内容提供者

  • 假设从application1添加到设备中的结构化数据不能被同一设备中的另一个application2访问,但是application1添加到设备上的配置文件照片对于运行在同一设备中的application2是可用的。
  • 假设android设备是一个城市,它中的应用是城市中的房屋,房屋中的人(应用)是数据。现在,内容提供商就像城市里的经纪人(android设备)。该代理为城市中的人们提供访问权限,以便查找不同的房屋,因为android设备中的内容提供商为不同的应用程序提供对设备中数据的访问。

共享偏好

  • 假设我有一个应用程序,比如说一个脸书应用程序,我用它来登录我的帐户。
  • 现在,这是我第一次输入我的用户名和密码来访问我的帐户。假设我一小时后退出应用程序,我再次使用同一张脸簿应用程序再次登录到我的应用程序。
  • 我必须再次输入用户名和密码才能登录到我的帐户,我还为我的应用程序和其他设置设置了一个主题,说明我的应用程序在我当前的手机中的外观。
  • 这是不必要的,因为考虑我是用我的手机登录到应用程序。因此,我将始终使用我的手机一次又一次地登录,因此一次又一次输入我的凭据是更多的工作,表明它不是一个用户友好的应用程序。
  • 在这种情况下,共享首选项非常方便,在这种情况下,我可以使用它的特性在一个xml文件中共享我的数据。xml文件实际上存在于安装在我手机中的Android应用程序中,即使应用程序关闭,该应用程序也不会被销毁。在这里,我们可以保存当前应用程序的用户首选项数据。
  • 因此,下次我在手机中打开我的应用程序时,我可以看到数据自动填写在必要的字段中,设置如下

文件存储

  • 在Android中,我们可以使用设备存储空间来存储应用程序的数据。数据类型涉及文本文件、图像文件、视频文件、音频文件等。
  • 如图所示,我们可以看到有两个地方可以这样做。一种方法是将原始文件写入主/secondary存储中。另一种方法是将缓存文件写入主/辅助存储。
  • 存储原始数据和缓存数据也有区别,用户存储在内存中的原始数据必须由用户显式删除,否则就会一直存在。存储在内存中的缓存数据不是永久数据,因为如果系统感到内存不足,就会自动删除它。

内部存储:

  • 假设应用程序中的用户已将数据存储在内部存储中,那么只有应用程序的用户才能访问移动上的数据,并且在用户卸载应用程序时会自动删除该数据。说到内部记忆是私有的。
  • 应用程序内部存储目录使用名称包名存储在android文件系统中的一个特殊位置。
  • 其他应用程序或当前应用程序的用户不能访问特定用户和特定应用程序设置的文件,除非明确地将其提供给用户进行可读/可写访问。

SQLite

  • Sqlite用于在运行android应用程序的移动设备中本地存储更多结构化数据。结构化数据涉及图中所示的内容,如学生的信息以行和列的形式显示。
  • Sqlite提供类似的功能,如Mysql和oracle,但功能功能有限。有些事情涉及对表执行查询操作。有一些特性,比如创建视图,但也有一些特性是不可用的,比如存储过程。
  • Sqlite非常有助于存储复杂和大的数据,这些数据可以下载一次,可以反复使用,直到应用程序运行为止。当应用程序关闭时,sqlite数据库也会被销毁。

把所有的碎片放在一起

票数 110
EN

Stack Overflow用户

发布于 2012-04-03 03:59:27

  • 共享首选项很适合存储.应用程序的首选项和其他一些小数据。它只是一个非常简单的持久字符串密钥存储,用于几个数据类型:布尔型、浮点型、int型、long和string。因此,例如,如果我的应用程序有一个登录,我可能会考虑将会话密钥存储为SharedPreferences中的字符串。
  • 内部存储很好地存储用户不需要访问的应用程序数据,因为用户无法轻松地访问内部存储。可能对缓存、日志和其他事情都有好处。任何只有应用程序才能创建、读取、更新或删除的内容。
  • 外部存储。跟我刚才说的正好相反。dropbox应用程序可能使用外部存储来存储用户的dropbox文件夹,这样用户就可以轻松地访问dropbox应用程序之外的这些文件,例如,使用文件管理器。
  • 每当您要使用大量结构化数据和相对严格的模式来管理它时,SQLite数据库都是很棒的。用外行的话说,SQLite就像MySQL或PostgreSQL,除了充当服务器守护进程的数据库之外,它只是存储在一个.db文件中,通过应用程序中的一个简单库进行访问和查询,而不是服务器守护进程从php之类的CGI脚本获取查询。虽然SQLite不能像专用数据库那样大,但对于小型应用程序(如安卓应用程序)来说,它是非常快速和方便的。如果我正在开发一个用于聚合和下载菜谱的应用程序,我会使用SQLite db,因为这类数据是相对结构化的,而且数据库将允许它很好地扩展。数据库很好,因为将所有数据写入一个文件,然后以您自己的专有格式解析它,这一点也不好玩。同样,用XML或JSON存储数据也不会那么糟糕。
  • 网络连接是指在云中存储数据。HTTP或FTP文件和内容通过java.net.*包进行传输。
票数 38
EN

Stack Overflow用户

发布于 2012-04-03 04:04:44

SharedPreferences主要用于特定于应用程序的设置,您可以通过设置菜单来访问这些设置,比如应用程序设置。在这里保持一切简单是个好主意,主要是布尔标志、短字符串或整数。SharedPreferences数据在设备重新启动时会持久化,并随着应用程序卸载而被删除。数据被保存为键值对。

内部存储主要用于更大的非持久性数据存储。如果你想要处理一个图像,一个短视频剪辑,一个大文本文件等等,你可以利用内部存储。但是你不把处理过的数据存储在内部存储器中--它的功能更像一个CPU的RAM。应用程序可用的内部存储量取决于设备,但是将任何东西保持在1MB以下总是一个好主意。数据通过其文件路径引用。

外部存储不仅指SDCard存储,而且对于高端手机来说,这可能意味着内部可安装存储(如Galaxy或S2中的存储)。这是您在应用程序中存储大型视频文件、高分辨率图像和要解析的20 to文本文件的地方。这也是一个存储数据的地方,如果您交换sd卡,您希望在设备之间共享这些数据。数据还通过其文件路径引用。

SQLite 是在常规数据库中存储几乎所有您想要的东西的地方--它的优点是将事物组织成表、行和列。它最适合在UI中以列表形式显示的内容--最好的例子是伟大的发明,即CursorAdapter。这里存储的数据在设备重新启动时也会持久化,并随app卸载而删除。如果将sqlite连接到ContentProvider上,还可以在应用程序之间共享数据。数据是使用游标访问的,在这里您可以调用方法,就好像在执行sql语句一样。

网络连接并不是一种真正的数据存储技术,而是一种为特定用户保存数据的方法,前提是设备通过某种身份验证连接到互联网上。你必须在每次应用程序需要的时候下载数据,或者进行一次数据同步,这最终会导致上面提到的另一个存储选项。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9986734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档