Android基础知识(二十一):Android五大存储之文件存储、Content Provider存储和网络存储

一、Android存储——持久化技术
数据持久化是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或者电脑关机的情况下,这些数据仍然不会丢失。保存在内存中的数据是处于瞬时状态的,而保存在存储设备中的数据是处于持久状态的,持久化技术则提供了一种机制可以让数据在瞬时状态和持久状态之间进行转换
Android系统中主要提供了3种方式用于简单地实现数据持久化功能,即文件存储SharedPreference存储以及数据库存储。除此之外,还有两种常用的存储方式为Content Provider方式存储以及网络存储。

二、文件存储
文件存储是Android中最基本的一种数据存储方式,它不对存储的内容进行任何的格式化处理,所有数据都是原封不动地保存到文件中,因而其比较适合用于存储一些简单的文本数据或二进制数据。
如果使用文件存储的方式来保存一些较为复杂的文本数据,就需要定义一套自己的格式规范,方便之后将数据从文件中重新解析出来。

  1. 将数据存储到文件中
    Context类中提供了一个openFileOutput()方法,可用于将数据存储到指定文件中,该方法接收两个参数,第一个参数是文件名,在文件创建的时候使用的为该名称,注意这里指定的的文件名不包含路径,因为所有文件都是默认存储到/data/data//files/目录下的。第二个参数为文件的操作模式。
    操作模式有四种:MODE_PRIVATE是默认的操作模式,表示当指定同样文件名的时候,所写入的内容将会覆盖原文件内容MODE_APPEND则表示如果该文件存在,就往文件里面追加内容,不存在就创建新文件;MODE_WORLD_READABLE表示允许其他的应用程序对本程序中的文件进行读操作;MODE_WORLD_WRITEABLE表示允许其他应用程序对本程序的文件进行写操作。
    将数据保存到文件中的例子如下。
  2. 从文件中读取数据
    Context类中提供了一个openFileInput()方法,用于从文件中读取数据。其只接受一个参数,即要读取的文件名,系统会自动到/data/data//files/目录下去加载这个文件,并返回一个FileInputStream对象。如下所示为从文件中读取数据的例子。
  3. 指定存储路径
    以上的存储和读取数据的方式中,都是通过Context中提供了的方法openFileOutput()和openFileInput()在指定的文件路径/data/data//files/目录下进行存储和读取。那么如何将数据存储到指定的路径?

    首先需要了解一下内部存储和外部存储的区别。
    内部存储并不是内存,而是位于系统中很特殊的一个位置,如果将文件存储于内部存储中,那么文件默认只能被本应用访问到,且一个应用所创建的所有文件都在和应用包名相同的目录下。应用创建于内部存储的文件,与这个应用是关联的,当该应用被卸载之后,内部存储中的这些文件也被删除
    外部存储在目前的手机中可能会令人疑惑,区别电脑手机的外部存储分为两个部分,一个是机身存储的外部存储部分,还有一个是SD卡部分。通常能够在手机端访问的文件路径即为机身存储的外部存储部分,一般内部存储部分是不可见的(可以通过Android Studio访问)。
    访问内部存储的API方法:
    Environment.getDataDirectory()
    getFilesDir().getAbsolutePath()
    getCacheDir().getAbsolutePath()
    getDir(“myFile”, MODE_PRIVEATE).getAbsolutePath()
    得到的path会因Android版本的不同而不同。指定文件路径进行存储的方法其实就是使用Java的IO流进行文件存储,唯一需要注意的是当指定的路径上的文件夹不存在的时候,需要使用mkdir()方法进行创建,Android不会自动创建。

三、Content Provider方式存储*
一个Content Provider类实现了一组标准的方法接口,从而能够让其他的应用保存或读取此Content Provider的各种数据类型。一个程序可以通过实现一个Content Provider的抽象接口将自己的数据暴露出去,外界可以通过这一套标准以及统一的接口和程序里的数据打交道,可以读取程序的数据,也可以删除程序的数据,当然中间也会涉及到一些安全问题。
关于Content Provider的使用,参看笔记:Android基础知识(十七):Content Provider。

四、网络存储*
通过网络的HTTP POST的方式发送数据,并存储到对应的服务中,在需要的时候,通过URL请求从服务获取数据。

参考资料:《第一行代码 Android 第2版》
Android之四大组件、六大布局、五大存储

Android基础知识(二十一):Android五大存储之文件存储、Content Provider存储和网络存储相关推荐

  1. Android基础知识巩固系列 Android之四大组件——ContentProvider(内容提供者)

    因为最近要面试,于是打算整理整理一下Android的基础知识,由于之前本人已经学习过大概的Android基础知识,这里主要讲这四大组件.五大存储.六大布局.网络请求等这些内容,其他一些等有时间再整理, ...

  2. Android基础知识(二十):Notification、提醒式通知(横幅)踩坑与通知界面设置跳转

    Android基础知识(二十):Notification.提醒式通知(横幅)踩坑与通知界面设置跳转 一.Notification通知与基本用法 通知Notification是Android系统中比较有 ...

  3. Android基础知识——完善

    首页 下载App × Android基础知识--完善 布鲁马 2016.05.17 10:29* 字数 5478 阅读 2672评论 1喜欢 38 疯狂Android摘要,Android基础知识好乱好 ...

  4. android基础知识

    技术型男 随笔 - 20, 文章 - 0, 评论 - 4, 引用 - 0 android基础知识 1. 前言 1.1. 什么是3G.4G Ÿ 第三代移动通信技术(3rd - Generation),速 ...

  5. 100天精通Andriod逆向——第2天:Android基础知识和jadx的使用

    目录 一.Android基础知识介绍 1.1 Android 历史版本 1.2 apk 包文件结构 1.3 Android系统目录介绍 二.jadx的使用 2.1 jadx 的简介 2.2 jadx ...

  6. Android 基础知识+app测试权限问题

    Android 基础知识(权限篇)** 前言 ​ Android是一个开源的,基于Linux的移动设备操作系统,主要用于移动设备,如智能手机和平板电脑.Android是由谷歌及其他公司带领的开放手机联 ...

  7. Android 基础知识复习

    Android 40基础知识点 1.        Android的四大组件是哪些,它们的作用? Android 开发的四大组件分别是:活动(activity),用于表现功能:服务(service), ...

  8. Android基础知识~入门进阶,一步步走到高手

    Android基础知识~入门进阶,一步步走到高手 2011年09月01日 [b]希望新入手ANDROID设备的朋友认真阅读本帖,一些简单的问题就可以自己解决了!!! 一:基础知识[/b] [b]1.什 ...

  9. Android基础知识 - SQLite数据库的最佳实践(使用事务、升级数据库的最佳写法)

    目录 使用事务 升级数据库的最佳写法 使用事务 SQLite数据库时支持事务的,事务的特性可以保证让某一系列的操作要么全部完成,要么一个都不会完成. 那么在什么情况下才需要使用事务呢? 想象以下场景, ...

最新文章

  1. pytorch 初始化权重
  2. 汇编语言——输入两位数比较大小
  3. 学完HTML5后可以开发哪些互联网产品呢?
  4. ajax全局加密,Ajax请求接口加密研究(针对网页前端的接口安全加密机制研究)...
  5. 对网站的文件和资源进行优化、前端开发优化
  6. pythonyaml参数传递_configutator-将yaml节点和命令行参数映射到python函数参数。-Nolan configutator To use:...
  7. Windows 11 新功能 Microsoft Teams
  8. 手环的PCBA部分,主要包括一颗集成BLE功能的MCU,以及由MCU控制的各种外设
  9. ajax三种错误ie,ie下jquery ajax 80020101错误的解决方法
  10. python ean13条形码的验证_(转)基于SQL的EAN13、ENA8条形码校验位生成
  11. Github:Semantic-Segmentation-Suite分割网络集锦--使用小结
  12. Photoshop插件-charIDToTypeID-PIStringTerminology.h-不同值的解释及参考-脚本开发-PS插件
  13. 51 nod 1010
  14. Android Jetpack 学习之Navigation、BottomNavigationView
  15. 手把手带大家搭建一个java个人网站(腾讯云为例)
  16. MIPI DSI转LVDS的桥接芯片,其应用图如下: ICN6202
  17. 打印机 检测到用过的耗材或者赝品耗材
  18. ipad2电池边玩边充电--转载
  19. emacs ido mode
  20. 恰逢人间四月天,来听听她们的故事吧

热门文章

  1. SAP ERP 与 Oracle ERP 哪个更适合你?
  2. 图说 ES Modules
  3. 推荐软件7 taskbar numberer,结果get了WIN相关的快捷键
  4. HydroD 实用教程(七)静水力分析
  5. html css字体如何居中,用CSS做将如何字体居中?
  6. WAR文件信息泄露及利用
  7. bluestacks启动问题
  8. 使用FontLab生成字体文件
  9. Ubuntu20.04管理密码重置
  10. React(精读官方文档) - 高级指引 -高阶组件