前言: 上一篇文章写了在Android中利用SharedPreferences保存数据,SharedPreferences在保存数据的时候主要是保存一些应用程序的设置信息或者少量的用户信息,并且是以key-value形式保存的String类的信息,比较有局限性。比如你需要保存从网络获取的图片到本地作为缓存数据,并且数量比较大,SharedPreferences就不能满足你的需求了,这个时候就要用到基本上所有平台都会用到的文件保存。 Android中以文件形式把数据保存到磁盘上与其他平台基本上都是类似的,本篇
http://developer.android.com/training/basics/data-storage/files.html
《移动互联网技术》课程是软件工程、电子信息等专业的专业课,主要介绍移动互联网系统及应用开发技术。课程内容主要包括移动互联网概述、无线网络技术、无线定位技术、Android应用开发和移动应用项目实践等五个部分。移动互联网概述主要介绍移动互联网的概况和发展,以及移动计算的特点。无线网络技术部分主要介绍移动通信网络(包括2G/3G/4G/5G技术)、无线传感器网络、Ad hoc网络、各种移动通信协议,以及移动IP技术。无线定位技术部分主要介绍无线定位的基本原理、定位方法、定位业务、数据采集等相关技术。Android应用开发部分主要介绍移动应用的开发环境、应用开发框架和各种功能组件以及常用的开发工具。移动应用项目实践部分主要介绍移动应用开发过程、移动应用客户端开发、以及应用开发实例。 课程的教学培养目标如下: 1.培养学生综合运用多门课程知识以解决工程领域问题的能力,能够理解各种移动通信方法,完成移动定位算法的设计。 2.培养学生移动应用编程能力,能够编写Andorid应用的主要功能模块,并掌握移动应用的开发流程。 3. 培养工程实践能力和创新能力。 通过本课程的学习应达到以下目的: 1.掌握移动互联网的基本概念和原理; 2.掌握移动应用系统的设计原则; 3.掌握Android应用软件的基本编程方法; 4.能正确使用常用的移动应用开发工具和测试工具。
在使用外部存储执行任何工作之前,应始终调用 getExternalStorageState() 以检查介质是否可用。介质可能已装载到计算机,处于缺失、只读或其他某种状态。 例如,以下是可用于检查可用性的几种方法:
安卓起初早年是有内置SD卡和可扩展插拔TF卡区分的,但是近年手机内置SD卡的高内存导致越来越少的手机支持TF卡(外置SD卡)扩展了。并且现在默认都是将文件优先存储于内置SD卡中。
上两节我们都是使用文本文件保存用户的信息,这明显是存在漏洞的。同时对文件中的内容不好管理。今天我们学习用SharedPreference保存。sharedPreference是专门保存一些比较零散的数据的。
目录介绍 01.磁盘沙盒的概述 1.1 项目背景说明 1.2 沙盒作用 1.3 设计目标 02.Android存储概念 2.1 存储划分介绍 2.2 机身内部存储 2.3 机身外部存储 2.4 SD卡外部存储 2.5 总结和梳理下 03.方案基础设计 3.1 整体架构图 3.2 UML设计图 3.3 关键流程图 3.4 接口设计图 3.5 模块间依赖关系 04.一些技术要点说明 4.1 使用队列管理Fragment栈 4.2 File文件列表 4.3 不同版本访问权限 4.4 访问文件操作 4.5 10和1
参考资料: https://www.jianshu.com/p/a34c644e3431 https://mp.weixin.qq.com/s/YNMKhqvVjmWsOzh24mDCsw https://mp.weixin.qq.com/s/Sx4fejCDTTI7nlzDpcZfKg
安卓碎片化的问题,由来已久,这次来看一下文件储存碎片化的问题。到底要怎么去正确选择和管理文件存储呢? 1 为什么要管理文件? Android手机一直以来被人诟病越用越卡,越用存储空间越少,经常
一、前言 Android 应用的数据存储问题也是一个被讨论多年的老话题了,伴随 Android 从诞生到现在的 Android 10。 时至今日还有很多问题在系统侧没有被很好的解决,同大多数开发者一样,微信也遇到了很多应用存储设计问题上的困扰。 本文想借此跟大家聊聊我们遇到的问题,以及微信在存储设计上做出的一些思考和尝试。 二、微信数据存储上的问题与思考 1. 有限的内部存储 早期 Android 手机自带存储空间只有内部存储,而且空间很有限。也是因为这样的原因,应用一般要将语音、图片、视频等文件放在
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。
Android Training 中Getting Started部分的阅读笔记
在开发PC端桌面程序时,作为开发人员,我们可以主宰一切。打开窗口,打开对话框,保存数据库,完全不用考虑太多。但是在开发安卓应用时,我们可能就感觉没有那么“爽”了,没有那种掌控一切的感觉。所以,安卓开发中,你能控制什么?
Context是应用中对象的上下文,其提供了应用的一些基础信息,例如resourceManager(资源管理)、applicationInfo(当前应用信息)、dir(应用开发路径)、area(文件分区)等,以及应用的一些基本方法,例如createBundleContext()、getApplicationContext()等。UIAbility组件和各种ExtensionAbility派生类组件都有各自不同的Context类。分别有基类Context、ApplicationContext、AbilityStageContext、UIAbilityContext、ExtensionContext、ServiceExtensionContext等Context。
在Android中进行图像处理的任务时,有时我们希望将处理后的结果以图像文件的格式保存在内部存储空间中,本文以此为目的,介绍将Bitmap对象的数据以PNG格式保存下来的方法。
不同的平台对应的文件系统是不同的,比如文件路径,因此 Flutter 中获取文件路径需要原生支持,原生端通过 MethodChannel 传递文件路径到 Flutter,如果没有特殊的需求,推荐大家使用 Google 官方维护的插件 path_provider。
在Android开发过程中,我们经常会对文件系统进行操作——存放、释放我们应用的数据。Android系统中提供了各种功能的文件目录,每个目录都有相应的特点和功能。 这篇文章主要介绍和记录一下实际开发过程中常用的各个文件目录。
try(FileOutputStream fos = openFileOutput("file_name",MODE_WORLD_WRITEABLE)){
我们之前设置拍照保存的文件地址的Uri,都是直接Intent.putExtra(MediaStore.EXTRA_OUTPUT,文件保存的Uri路径),但是7.0之后,对用户权限提高了保护,之前那种方式行不通了,所以我们要做7.0的判断,用FileProvider获取设置保存的文件Uri,然后放到Intent.putExtra(MediaStore.EXTRA_OUTPUT,文件保存的Uri路径)中,代码如下:
一般地,通过 Context 和 Environment 相关的方法获取文件存取的路径。
如果你也经常关注视频号,肯定也已经发现,视频号除了点赞、评论、收藏、转发外,并没有下载功能。
结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询语言。
从Android的开发角度来说,Handler是Android消息机制的上层接口,这使得开发过程中只需要和Handler交互即可。 Handler的使用过程比较简单,通过Handler可以轻松地将一个任务切换到Handler所在的线程中去执行。 同时,纠正一个大家的误解,很多人认为Handler的作用就是更新UI,这的确没错,但是更新UI仅仅是Handler的一个特殊的使用场景。具体为: 有时候需要在子线程中进行一些耗时的I/O操作,可能是读取文件或者是访问网络等。当耗时操作完成以后,需要在UI上做一些改变,由于Android开发规范的限制,我们并不能在子线程中访问UI控件,否则会触发异常,这个时候通过Handler就可以更新UI的操作切换到主线程中执行,因此,我们得出结论:
前几天我们游戏在一个同事的Android手机上启动时无法正常进入,经查发现Application.temporaryCachePath和Application.persistentDataPath返回空字符串。便花时间认真研究了一下Unity3D的路径问题。我们常用的是以下四个路径:
如今,许多企业都在采用“云优先”的策略,并建议IT团队评估云存储是否是一个可以接收所有请求的可行选项。实施这种策略是可以理解的,因为云计算提供了许多好处,包括促进协作工作,提高灵活性和弹性,提供具有成本效益的数据存档,更不用说可以节省更多的成本。事实上,调研机构Gartner的Sid Nag报告说,“公共云的增长得到了支持,采用公共云的组织可以节约14%的预算。” 然而,“云优先”政策的实施仍然很慢,因为Nag还指出:“使用云服务的愿望超过实际采用率。毫无疑问,组织内部使用云服务有很大的需求,但组织仍
爆炸性的数据让企业考虑混合云存储来满足容量需求。但云的成本和安全问题需要解决。 各种规模的企业都面临非结构化数据集前所未有的增长速度。 增长的速度和使用的容量主要是源于捕捉和传输数据的物联网设备的快速部署。 许多小型企业正寻求公共云来帮助他们跟上这种爆炸性增长。 虽然他们的独特需求和成本现实要求小型企业与大型企业相比,寻求不同的云方案,但是,企业混合云方案可能可行。 企业混合云在企业内部数据中心中保存一部分数据,并在公共云存储设施中保存一部分。通常,企业内部存储保存大部分活跃数据,减轻公共云存储中固有的延迟
本篇继续围绕Android安全为核心知识点。将全面介绍google建议在安全开发的全面知识规范介绍,希望对这块有兴趣的朋友开拓知识面,详解请看结尾推荐的几篇文章。
最近在鼓捣应用升级时遇到了安装失败的问题,抛出了“apk exposed beyond app through Intent.getData()”异常,网上一顿谷歌百度后晓得了,是谷歌在Android7.0(api 24)后出的幺蛾子。
许多开发者(包括博主在内)都是闷骚的程序员,为了开发调试方便,常常在代码里加上日志,还经常在页面上各种弹窗提示。这固然有利于发现bug、提高软件质量,但过多的调试信息往往容易泄露敏感信息,如用户的账号密码、业务流程的逻辑。所以从保密需要考虑,app在上线前都得去掉多余的调试信息,也就形成了上线模式。 建立上线模式的好处有: 1、保护用户的敏感账户信息不被泄露; 2、保护业务逻辑与流程处理信息不被泄露; 3、把异常信息转换为更友好的提示信息,改善用户体验; 上线模式不是简单的把调试代码删掉,而是通过某个开关来控制是否显示调试信息,因为app后续还得修改、更新、重新发布,这个迭代的过程也要不断调试来实现新功能。具体地说,就是建立几个公共类,代码中涉及到输入调试信息的地方,都改为调用公共类的方法;然后在公共类定义几个布尔变量作为开关,在开发时打开调试,在上线时关闭调试,如此便实现了开发模式和上线模式的切换。
消息队列的作用是系统解耦、同步改异步、请求消峰,举个下订单的例子: 前端获取用户订单信息,请求后端的订单创建接口。这个接口并不直接请求订单服务,而是首先生成唯一订单编号,再组装一个订单消息并发送给MQ,然后返回唯一订单编号给前端。前端会根据唯一订单编号轮询订单状态接口,如果订单创建成功,则拉起支付界面引导用户付款。作为消费者,订单服务收到订单消息后,开始检查参数、检查库存、生成订单等等核心业务流程。 解耦体现在订单创建接口并没有直接访问订单服务,使得它不用关注订单服务接口的变化。由于不是直接调用,同步操作变成了异步操作。试想一下,订单创建状态是同步返回的,用户界面必然卡起来。由于消息队列允许消息堆积,即使大量的用户订单涌过来,订单服务依然能够稳步的处理订单消息。
中间件是计算机软件,它为操作系统以外的软件应用程序提供服务。它可以被描述为“软件粘合剂”。
人们通过输入设备把需要处理的信息输入计算机,计算机通过中央处理器把信息加工后,再通过输出设备把处理后的结果告诉人们。
Android支持外部存储(case-insensitive filesystem with immutable POSIX permission classes and modes)。
:如果有一天,我的生命要靠一台机器维持,请帮我关掉它。 :哎~你怎么把路由器关了。
那么,今天继续再来封装一个网络组件,基于 volley 的二次封装,目的也是为了简化外部使用,以及新项目可快速接入使用。
据The Hacker News消息,工业安全公司 Claroty安全研究人员发现了一种名为“Evil PLC”的新型攻击技术。该技术的巧妙之处在于,可将可编程逻辑控制器 ( PLC ) 武器化,以在工程工作站中获得初步立足点,随后入侵运营技术 (OT) 网络。 Claroty公司表示,目前受影响的工程工作站软件包括罗克韦尔自动化、施耐德电气、通用电气、贝加莱、新杰、OVARRO 和艾默生在内的多家巨头企业。 PLC是种专门为在工业环境下应用而设计的数字运算操作电子系统。它采用一种可编程的存储器,在其内部
Dictionary<TKey, TValue> 是泛型类型,其中 TKey 表示键的类型,TValue 表示值的类型。
前言 前几天有个用户在我们论坛反馈一个问题,说他们的app在Android N机型中升级失败了,看了一下反馈的问题,基本确定了是因为Android N收敛了访问共享文件权限,即在Android N中使用intent不允许跨package共享file://URI,如果在工程中设置targetSDK版本为Android N并且有通过Intent传递文件它会抛出FileUriExposedException异常。发现这个问题之后呢,我自然尝试复现一下,由于没有Android 7.0的真机,我就在优测线上租用了一个
https://mp.weixin.qq.com/s/aiDMyAfAZvaYIHuIMLAlcg
上面是官网的AndroidQ的隐私权变更链接,本文章只针对部分重大隐私权限变更做出解释说明。
上节学习了如何在手机内部存储中读写文件,本节学习如何在手机的外部存储中读写文件。那就是如何在Sdcard中读写文件。
Web 浏览器无疑是用户访问互联网最常见的入口。浏览器凭借其免安装和跨平台等优势,逐渐取代了很多传统的富客户端。
MongoDB 是一个面向文档的 NoSQL 数据库,用于存储大量数据。MongoDB 使用集合和文档,而不是传统关系数据库中的表和行。MongoDB 是一个最早出现在 2000 年代中期的数据库。
I/O 即输入 / 输出,通常指数据在内部存储器和外部存储器或其他周边设备之间的输入和输出 。 这句话换到编程中就是 CPU 与外部存储器的输入输出,包括 CPU 本身的一,二,三级的缓存,内存,硬盘,网络,Usb 设备等等 Linux中的IO机制 阻塞与非阻塞 在调用IO函数时,如果需要等待IO事件准备就绪才返回执行结果就是阻塞的IO调用,如果调用IO函数时,不需要IO事件准备就绪就可以返回结果就是非阻塞。 同步与异步 同步是指在非阻塞的前提下每次调用IO函数不一定会返回准备就绪的IO事件,所以需要不断地
多年前,我们将 Dropbox 称为“魔力口袋”,因为它设计的初衷就是让用户将所有文件放在一个顺手的地方。一路发展下来,Dropbox 已经从一个简单的东西发展成为世界上最为强大、随处可用的协作平台。
设计模式(Design Pattern)是软件开发领域的宝贵经验,是多人反复借鉴和广泛应用的代码设计指导。它们是一系列经过分类和归纳的代码组织方法,旨在实现可重用性、可维护性和可理解性。使用设计模式,我们能够编写高质量的代码,使其更易于他人理解,并提供了代码可靠性的保证。
领取专属 10元无门槛券
手把手带您无忧上云