安卓技术博客2

安卓技术博客2-深入了解Android基础知识

  1. 本博客书写缘由
    大三暑期实习面试相关岗位的时候,被项目负责人问了一些知识,发现Android的很多知识都需要我们深入了解,不能只是简简单单的会做简单项目,要对于它的各种架构、功能都需深入了解,这样才能合格地做一名安卓开发人员。本文主要介绍了一些我面试过程中被问到的问题以及个人的心得体会。
  2. 本博客内容
    2.1 Android中数据存储方式
    1)Android中数据存储方式中有以下几种:file,SharePreference,SQlite,网络,ContentProvider。
    (1) File:以I/O流的形式把数据存入手机内存或SD卡,可以存储大数据,如音乐、图片或视频等。对于手机内存来说系统会根据每个应用的包名创建一个/data/data/包名/的文件夹,访问自己包名下的目录是不需要权限的,并且 Android 已经提供了非常简便的 API 可以直接去访问该文件夹。访问时可以用getFilesDir()和getCacheDir(),两个的区别是系统会自动清理后者中的内容。
    (2) SharePreference:SP存储本质上是一个XML文件,以键值对的形式存入手机内存中。常用于存储简单的参数设置,如登陆账号密码的存储,窗口功能状态的存储等,该存储文件位于:data/data/包名/shared_prefs文件夹中。使用的时候,首先需要通过context.getSharedPrefrences(String name,int mode)获取SharedPrefrences的实例对象,存储数据时,用SharedPrefrences的实例对象得到SharedPrefrences文件的编辑器,在编辑器中用putXxx()添加数据,之后务必用commit提交数据,否则无法获取数据。取数据时,直接用getXxx()方法。
    (3) SQlite:数据库所有信息都存储在单一文件内,占用内存小,并且支持基本SQL语法,是项目中经常被采用的一种数据存储方式,通常用于存储用户信息等,例如在手机上做一个学生信息管理系统。SQLite 是一款内置到移动设备上的轻量型的数据库,SQLiteOpenHelper 是Android 提供的一个抽象工具类,负责管理数据库的创建、升级工作。
    (4) 网络:网络存储,把数据存储到服务器中,不存储在本地,使用的时候直接从网络获取。
    (5) ContentProvider: 内容提供者。以数据库的形式存入手机,可以共享自己的数据给其他应用使用,相对于其他对外共享数据方式而言,ContentProvider统一了数据访问方式,使用起来更规范。
    2)面试与之相关问题
    (1)SharedPreference是进城同步的吗,有没有什么方法进程同步呢?
    默认不是,可以设置模式MODE_MULTI_PROCESS做到进程同步,但因为该模式有很多坑,已经被Google弃用,官方建议使用ContentProvider
    (2)SharedPreferences commit和apply的区别
    commit是同步的提交,这种方式很常用,在比较早的SDK版本中就有了。这种提交方式会阻塞调用它的线程,并且这个方法会返回boolean值告知保存是否成功(如果不成功,可以做一些补救措施)。apply是异步的提交方式,目前Android Studio也会提示大家使用这种方式
    2.2 Android的设计模式
    1) MVP模式
    MVP是Model-View—Presenter的简称。在MVP模式中,我们将Activity或者Fragment以及它们的xml文件一起作为View,View中含有一个Presenter实例,可以和Presenter进行交互;Presenter中含有View的实例,可以做一些逻辑控制工作和作为View和Model的媒介。解耦,提高可维护性和复用性方便测试(适合于打桩测试)

2) MVVM
MVVM模式与MVP模式一样,也将应用分为三层,并且各个对应的层的职责相似:
Model层,主要负责数据的提供。Model层提供业务逻辑的数据结构(比如,实体类),提供数据的获取(比如,从本地数据库或者远程网络获取数据),提供数据的存储。
View层,主要负责界面的显示。View层不涉及任何的业务逻辑处理,它持有ViewModel层的引用,当需要进行业务逻辑处理时通知ViewModel层。
ViewModel层,主要负责业务逻辑的处理。ViewModel层不涉及任何的视图操作。通过官方提供的Data Binding库,View层和ViewModel层中的数据可以实现绑定,ViewModel层中数据的变化可以自动通知View层进行更新,因此ViewModel层不需要持有View层的引用。ViewModel层可以看作是View层的数据模型和Presenter层的结合。

2.3 Android中的Gradle配置问题
1) Gradle
(1) Gradle是什么?
Gradle是一个自动化构建工具,兼容Maven等仓库,基于Groovy的特定领域语言来声明名目设置。
(2) Gradle的文件结构?
settings.gradle:整个Project的配置文件,可以设置包含哪些module
build.gradle (Project的gradle文件):整个Project的配置文件
build.gradle(Module):Module的配置文件
gradle.properties:可以在 gradle.properties 文件中配置一些变量
(3) 为什么会有两套repositories和dependencies?
buildscript里面的那个是插件初始化环境用的,用于设定插件的下载仓库;android 中是工程依赖的一些模块和远程library的下载仓库的
(4) Gradle打包时的Proguard?
通过在buildTypes中配置minifyEnable来开启和关闭proguard。
通过proguardFiles 来配置混淆参数与keep的内容。
混淆的作用:
压缩(Shrink):检测并移除代码中无用的类、字段、方法和特性(Attribute)。
优化(Optimize):对字节码进行优化,移除无用的指令。
混淆(Obfuscate):使用a,b,c,d这样简短而无意义的名称,对类、字段和方法进行重命名。
预检(Preveirfy):在Java平台上对处理后的代码进行预检,确保加载的class文件是可执行的。
3. 心得
面试问题其实都是很基本的问题,都需要我们深入进去,不能仅仅知道有这个名词,多总结开发过程中的问题,提升个人的能力,应多去了解后台前端和一些前沿技术,多学习Java高级知识同时深入了解算法和数据结构,不能因为难就不学习了,多总结,多规划,记录总结。
个人博客链接:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值