一周总结报告
9/13-9/18这一周主要是学习了Fragment、SQLiteDatabase、MVP模式、参加《Selinux》和《OTA》培训、完成APP以及PDX226项目的自测。
一、 Fragment
(一) 概述
- 介绍
使用Fragment可以把屏幕划分成几块,然后进行分组,进行一个模块化管理。Fragment不能够单独使用,需要嵌套在Activity中使用,其生命周期也受到宿主Activity的生命周期的影响。
Fragment简化了大屏幕UI的设计,它不需要开发者管理组件包含关系的复杂变化,开发者使用Fragment对UI组件进行分组、模块化管理,就可以更方便地在运行过程中动态更新Activity的用户界面。
- 特征
- Fragment总是作为Activity界面的组成部分。Fragment可调用getActivity()方法获取它所在的Activity,Activity可调用FragmentManager的findFragmentById()或findFragmentTag()方法来获取Fragment。
- 在Activity运行过程中,可调用FragmentManager的add()、remove()、replace()方法动态地添加、删除或替换Fragment。
- 一个Activity可以同时组合多个Fragment;反过来,一个Fragment也可被多个Activity复用。
- Fragment可以响应自己的输入事件,并拥有自己的生命周期,但它们的生命周期直接被其所属的Activity的生命周期控制。
- 优势
² 模块化:我们不必把所有代码全部写在Activity中,而是把代码写在各自的Fragment中。
² 可重用:多个Activity可以重用一个Fragment。
² 可适配:根据硬件的屏幕尺寸、屏幕方向,能够方便地实现不同的布局,这样用户体验更好。
- 核心类
l Fragment:Fragment的基类,任何创建的Fragment都需要继承该类。
l FragmentManager:管理和维护Fragment。它是抽象类,具体的实现类是FragmentManagerImpl。
l FragmentTransaction:对Fragment的添加、删除等操作都需要通过事务方式进行。它是抽象类,具体的实现类是BackStackRecord。
(二) 创建Fragment需要实现的方法
u onCreate():系统创建Fragment对象后回调该方法,在实现代码中只初始化想要在Fragment中保持的必要组件,当Fragment被暂停或者停止后可以恢复。
u onCreateView():当Fragment绘制界面组件时会回调该方法。该方法必须返回一个View,该View也就是该Fragment所显示的View。
u onPause():当用户离开该Fragment时将会回调该方法。
(三) Fragment使用
- 静态加载
流程:(1)定义Fragment的xml布局文件
(2)自定义Fragment类,继承Fragment类或其子类,同时实现onCreate()方法,在方法中,通过inflater.inflate加载布局文件,接着返回其View
(3)在需要加载Fragment的Activity对应布局文件中<fragment>的name属性设为全限定类名,即包名.fragment
(4)最后在Activity调用setContentView()加载布局文件即可
注:静态加载一旦添加就不能在运行时删除。
- 动态加载
(1) 获得FragmentManager对象,通过getSupportFragmentManager()
(2) 获得FragmentTransaction对象,通过fm.beginTransaction()
(3) 调用add()方法或者repalce()方法加载Fragment;
(4) 最后调用commit()方法提交事务
概念上理解了,还没有实际代码应用,预计在下周APP编写过程中应用。
二、 SQLiteDatabase
1、为了实现对数据库版本进行管理, SQLiteOpenHelper 类提供了两个重要的方法 , 分别onCreate(SQLiteDatabasedb) 和 onUpgrade(SQLiteDatabase db, int oldVersion, intnewVersion)用于初次使用软件时生成数据库表,后者用于升级软件时更新数据库表结构。
2、auto_increment是用于主键自动增长的,从1开始增长,当你把第一条记录删除时,再插入第二跳数据时,主键值是2,不是1。
3、MySQL的中AUTO_INCREMENT类型的属性用于为一个表中记录自动生成ID功能。
4、有些语句比如创建、查询、插入及删除跟MySQL通用。
三、 Selinux
安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统,搭建在Linux Security Module(LSM)基础上。
Selinux模式:Permissve Mode(宽容模式):不会拦截,但是会输出完整的avc日志
Enfocing mode(强制模式):会拦截,同时也会输出对应的avc日志
Disabled:关闭 SELinux。
Selinux理解上有难度,课后作业完成困难。
四、 OTA
1. OTA整包跟OTA差分包?
原生命令:make otapackage:
(1)整包升级:full_m7_xxx_ota.zip (out/target/product/m7/)
(2)中间包:target_files-xxx.zip (out/target/product/obj/PACKAGING/target_files_intermediates) ,一般用于制作差分包,进行差分升级。
2.OTA本地升级验证方式
(1).User版本升级验证
由于User版本无法获得root权限,所以采用apk进行升级。将apk安装到手机中,随后将OTA升级包push到 /sdcard/update.zip。点击启动apk,点击升级即可。进recovery选择SD卡升级也可。
在recovery模式下:adb sideload update.zip
(2).UserDebug版本升级验证
UserDebug版本,可以打开root权限。将OTA的升级包放到/system/update_engine/scripts目录下,在该目录下执行python update_device.py --flie xx.zip即可升级。
(3).User/UserDebug皆可
对于既没有apk,本地也没有代码这种情况。可以采取在终端下运行adb reboot recovery 进入recovery模式选择从adb升级,随后在终端中执行 adb sideload xx.zip即可。
OTA培训只是浅显的理解了一些基本概念,勉强完成课后作业。
五、 MVP模式
MVP是一个将后台任务和activities/views/fragment分离的方法,让它们独立于绝大多数跟生命周期相关的事件。
View(UI显示层):是指显示数据并且和用户交互的层。在安卓中,它们可以是一个Activity,一个Fragment,一个android.view.View或者是一个Dialog。
Model(数据层):是数据源层。比如数据库接口或者远程服务器的api。
Presenter(逻辑处理层):是从Model中获取数据并提供给View的层,Presenter还负责处理后台任务。
MVP使用交互流程图示:
学习MVP模式容易,但是应用有些困难,可能需要在多次实践中才能理解透彻。
六、 去掉导航栏
去掉顶部导航栏较简单的方法是在onCeate()方法中第一行写下如下代码:
requestWindowFeature(Window.FEATURE_NO_TITLE);
但是发现仅仅在onCreate()方法中添加以上代码没有起作用,是因为在android studio中继承Activity的时候一般继承的是AppCompatActivity。这个是为了向下兼容的,这样是去不掉上面的标题栏的,只需要把AppCompatActivity改成Activity就可以去掉标题栏了。
APP目前进度:实现登陆、注册功能,简单的音乐播放,多语言以及美观的登陆注册页面,剩下功能预计下周完成。