Android 7. 1 DeskClock(一)AlarmClockFragment分析

本文详细分析了Android 7.1 DeskClock中的AlarmClockFragment,探讨了Alarm和AlarmInstance的基本数据,闹钟状态的转变过程,以及设置闹钟和闹铃响铃的代码流程。AlarmInstance用于记录闹钟状态和ID,Alarm则存储基础数据。状态转换关键在于AlarmStateManager,其根据时间变化和用户操作更新闹钟状态。
摘要由CSDN通过智能技术生成

   在DeskClock模块中主要通过四大界面(AlarmClockFragment、ClockFragment、TimerFragment、StopwatchFragment)与用户交互,而此四个界面中常用的为闹钟设置界面(AlarmClocFragment),因此本文章主要讲解AlarmClocFragment的重要代码和流程。本文主要从三大部分讲解:基本数据、闹钟状态转变过程、代码流程

     为什么从这三方面讲解?因为闹钟模块的特点之一是对数据处理操作很频繁,所以了解基本数据是一个基础,而闹钟状态的转变过程是每一个打开闹钟必须做的重要事情,所以是重点,最后加上代码流程,基本上能明白AlarmClocFragment的整个工作过程。

1. 基本数据

     AlarmClocFragment部分打开的闹钟都包含两条基本的数据Alarm和AlarmInstance:Alarm记录的是闹钟的基础数据;AlarmInstance一部分数据来源于Alarm,同时增加一些闹钟状态和AlarmInstance ID值。

     此时肯定会有疑问:那为什么有Alarm,还需要AlarmInstance呢?

     因为AlarmInstance里面记录着闹钟的状态,并且可以随时删掉,此时Alarm可以起到备份作用。有了Alarm基本数据,用户就可以再次打开闹钟,就能再次创建AlarmInstance;如果代码中只设定Alarm数据,不设定AlarmInstance数据,那删除闹钟后就不能再次打开,只能让用户重新创建了,用户体验就不好,而且影响程序的效率。

     再来讨论下Alarm和AlarmInstance中有哪些数据。Alarm和AlarmInstance的表是在ClockDatabaseHelper中创建的,如下所示:

   Alarm Table :  

 private static void createAlarmsTable(SQLiteDatabase db) {

        db.execSQL("CREATE TABLE " + ALARMS_TABLE_NAME + " (" +

                ClockContract.AlarmsColumns._ID + " INTEGER PRIMARY KEY," +

                ClockContract.AlarmsColumns.HOUR + " INTEGER NOT NULL, " +

                ClockContract.AlarmsColumns.MINUTES + " INTEGER NOT NULL, " +

                ClockContract.AlarmsColumns.DAYS_OF_WEEK + " INTEGER NOT NULL, " +

                ClockContract.AlarmsColumns.ENABLED+ " INTEGER NOT NULL, " +

                ClockContract.AlarmsColumns.VIBRATE + " INTEGER NOT NULL, " +

                ClockContract.AlarmsColumns.LABEL + " TEXT NOT NULL, " +

                ClockContract.AlarmsColumns.RINGTONE + " TEXT, " +

                ClockContract.AlarmsColumns.DELETE_AFTER_USE + " INTEGER NOT NULL DEFAULT 0);");}

 

   AlarmInstance Table:

 private static void createInstanceTable(SQLiteDatabase db) {

        db.execSQL("CREATE TABLE " + INSTANCES_TABLE_NAME + " (" +

                ClockContract.InstancesColumns._ID + " INTEGER PRIMARY KEY," +

                ClockContract.InstancesColumns.YEAR + " INTEGER NOT NULL, " +

                ClockContract.InstancesColumns.MONTH + " INTEGER NOT NULL, " +

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值