9/13-9/18

一周总结报告

9/13-9/18这一周主要是学习了Fragment、SQLiteDatabase、MVP模式、参加《Selinux》和《OTA》培训、完成APP以及PDX226项目的自测。

一、         Fragment

(一) 概述

  1. 介绍

使用Fragment可以把屏幕划分成几块,然后进行分组,进行一个模块化管理。Fragment不能够单独使用,需要嵌套在Activity中使用,其生命周期也受到宿主Activity的生命周期的影响。

Fragment简化了大屏幕UI的设计,它不需要开发者管理组件包含关系的复杂变化,开发者使用Fragment对UI组件进行分组、模块化管理,就可以更方便地在运行过程中动态更新Activity的用户界面。

  1. 特征
  • Fragment总是作为Activity界面的组成部分。Fragment可调用getActivity()方法获取它所在的Activity,Activity可调用FragmentManager的findFragmentById()或findFragmentTag()方法来获取Fragment。
  • 在Activity运行过程中,可调用FragmentManager的add()、remove()、replace()方法动态地添加、删除或替换Fragment。
  • 一个Activity可以同时组合多个Fragment;反过来,一个Fragment也可被多个Activity复用。
  • Fragment可以响应自己的输入事件,并拥有自己的生命周期,但它们的生命周期直接被其所属的Activity的生命周期控制。
  1. 优势

²  模块化:我们不必把所有代码全部写在Activity中,而是把代码写在各自的Fragment中。

²  可重用:多个Activity可以重用一个Fragment。

²  可适配:根据硬件的屏幕尺寸、屏幕方向,能够方便地实现不同的布局,这样用户体验更好。

  1. 核心类

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. 静态加载

流程:(1)定义Fragment的xml布局文件

(2)自定义Fragment类,继承Fragment类或其子类,同时实现onCreate()方法,在方法中,通过inflater.inflate加载布局文件,接着返回其View

(3)在需要加载Fragment的Activity对应布局文件中<fragment>的name属性设为全限定类名,即包名.fragment

(4)最后在Activity调用setContentView()加载布局文件即可

注:静态加载一旦添加就不能在运行时删除。

  1. 动态加载

(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目前进度:实现登陆、注册功能,简单的音乐播放,多语言以及美观的登陆注册页面,剩下功能预计下周完成。

posted @ 2021-10-14 17:43  星橙月  阅读(105)  评论(0编辑  收藏  举报