Android JetPack架构组件介绍(一)

Android在2018年的Google大会推出了Android JetPack工具库,这个工具库将常用的功能统一封装起来,提高开发者的开发效率,提高代码的复用性。目前JetPack主要封装的功能包含基础框架、应用架构、应用行为和UI界面四个方面,除了应用架构比较复杂外其他的使用起来都相对简单,这里主要介绍JetPack的架构组件功能。

Room数据库框架

Android的数据库是基于SQLite数据库的简单封装,用户需要继承SQLiteOpenHelper类实现数据的增删改查,手动转换关系型数据到Java对象数据的操作繁琐而且很容易产生大量的重复代码。目前市面上有不少第三方开源的ORM库,不过这些库的体积庞大,有些还使用反射容易造成性能问题。
Room ORM框架基于注解和APT在编译时生成代码,用户只需要简单配置实体对象就能够正确生成数据库表,所有数据库操作都只需要用户提供对应的SQL语句,查询工作完全由框架生成模板代码。ROOM框架封装后的数据库逻辑完全是面向对象的实现方式,能够轻松的集成到Android开发项目中。

使用步骤

  1. 框架引入
   implementation  "android.arch.persistence.room:runtime:$rootProject.roomVersion"
   annotationProcessor "android.arch.persistence.room:compiler:$rootProject.roomVersion"
   androidTestImplementation "android.arch.persistence.room:testing:$rootProject.roomVersion“
  1. 构建数据库对象
Room.databaseBuilder(sContext, AdsDatabase.class, "ads_database.db")
         .addCallback(new Callback)
         .addMigrations(new Migration(1, 2) )
         .allowMainThreadQueries()
         .build();
  1. 配置实体
@Entity(tableName = "tb_download")
public class DownloadEntity {
    @PrimaryKey(autoGenerate = true)
    private int id;
    private String url;
    private long startTime;
    private long downloadTime;
    private int status;
    private int loadType;
    private String description;
}
  1. 定义Dao对象
@Dao
public interface DownloadDao {
    @Insert
    void insert(DownloadEntity entity);

    @Query("delete from tb_download")
    void deleteAll();

    @Query("select * from tb_download where status in (:status)")
    List<DownloadEntity> queryByStatus(int[] status);
}
  1. DB类增加注解实体,添加Dao返回接口
@Database(entities = { DownloadEntity.class, MovieEntity.class }, version = 3)
public abstract class AdsDatabase extends RoomDatabase {
    public abstract DownloadDao getDownloadDao();
    public abstract MovieDao getMovieDao();
}

完成上面的配置步骤Build一下Project,会自动生成AdsDataBase_Impl对象,它继承自RoomDatabase在内部包含了SupportSQLiteOpenHelper对象,该对象的实现类内部包含了SQLiteOpenHelper对象负责管理Sqlite数据库的交互任务,在编译时通过android.arch.persistence.room:compiler库中的APT Processor处理, 这些Processor会查看注解了@DataBase的数据库类,注解@Entity的实体类,注解@Dao的数据请求接口,根据根据实体类生成数据库表,根据Dao接口中的SQL语句生成数据库查询方法,这些都是编译时自动生成的保证了数据库存取的高效率,开发者只需要调用获取Dao接口就能够对数据库做CRUD操作。
在这里插入图片描述

WorkManager组件

Android中四大组件之一的Service组件主要负责在后台长时间运行不需要界面的任务,不过Service在后台运行需要消耗电量导致手机的续航能力差,谷歌Android引入了睡眠模式,在这种模式下网络、GPS等耗电功能都被禁止直到用户重新点亮屏幕。为此Android7.0引入了JobSchedule工具,所有的后台任务都提交给JobSchedule服务处理,它会在某些不确定的时间唤醒Android系统并执行提交给它的任务,不过在7.0上JobSchedule在重新启动后无法继续执行之前的任务,到了8.0系统才解决这个BUG,因而8.0之前版本的异步任务都需要提交给AlarmService来实现。WorkManager封装了这两种接口并且提供了工作队列,当多个任务被提交会执行不同的调度方法,确保所有任务的顺利执行。

/** 适用于即使进程退出依然运行在后台的工作,如果进程退出任务不必存在推荐
使用线程池。在>=23版本使用的是Job Schedule实现,低于23版本使用AlarmManager
实现,WorkManager封装了二者的差别提供统一的接口,用户不必担心版本适配问题,
只需要专注于自己的业务。
*/
if (Build.VE
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值