RepeatingAlarmSample

来源:互联网 发布:fabs在c语言中用法 编辑:程序博客网 时间:2024/04/29 10:59


================================================= 以上是 Log 的结构 ========================================

  此项目总共有三个包,如下图所示:

  

  我们先分析 logger 包,如下图所示:

  


  通过对代码的分析,可以发现,LogNode 是一个接口,LogWrapper、LogView、MessageOnlyLogFilter 分别实现了 LogNode 接口,其中 LogView 同时继承自 TextView,用于将 Log 信息输出到 TextView 控件上,MessageOnlyLogFilter 则只打印出 message 信息。

  Log 类则使用命令模式,里面持有一个 LogNode 对象,然后将 Log 方法的实现委托给 LogNode 对象完成,从而使得 Log 信息打印更有弹性。

   LogFragment 的布局是 ScrollView 和 TextView 的组合。

  

  然后分析 MainActivity


  MinActivity 继承自SampleActivityBase,而 SampleActivityBase 又继承自 FragmentActivity , 使用了 模板模式, 初始化了默认的 Log,子类可以重载 Log 初始化,从而动态改变Log 的行为。 SampleActivityBase 中默认初始化的 Log, 新建了一个 LogWrapper,然后与 Log 绑定,从而成为 Log 真正的执行者。


  MainActivity 重写了initializeLogging() 方法,在 Log 链中,第一曾为一个 LogWrapper 对象,然后是 MessageOnlyLogFilter 对象,最后是 LogView 对象。这样,当 Log 执行方法时,会逐步执行这三个对象的 println 方法

  

================================================= repeating alarm ========================================


  RepeatingAlarmFragment 方法:

  首先是 onCreate() 里面的方法: setHasOptionsMenu(true);  这个意思是,菜单属于 fragment, 并且在 onOptionsItemSelected() 这个方法响应特定 item 的点击事件

  

  这个判断表示, 只有点击 id 为 sample_action 的 菜单 item 项由这个 fragment 响应。


  最后按照这样的程序设置定时闹钟:

  Intent intent = new Intent();

  PendingIntent pendingIntent = PendingIntent.getActivity(this,REQUEST_CODE,intent,0);

  //  获取 AlarmManager

  AlarmManager alarmManager = (AlarmManager) getActivity().getSystemService(getActivity().ALARM_SERVICE);

  // 设置 重复周期,以及到期之后的执行动作

  alarmManager.setRepeating(alarmType, SystemClock.elapsedRealtime() + FIFTEEN_SEC_MILLIS, FIFTEEN_SEC_MILLIS, pendingIntent);


  第一个参数表示 闹钟的类型, 

  第二个参数表示 第一次触发的时刻

  第三个参数表示 每次触发的周期

  第四个参数表四 没有触发的动作


  SystemClock.elapsedRealtime() 表示自从开机之后的时间



  


0 0
原创粉丝点击