第二篇 android应用开发模式之模板模式

        Android提供了一个包含各种服务的应用框架, 为应用开发者提供了标准的应用程序开发方法,应用开发者只需通过四种组件的使用,实现组件提供的相关接口及提供应用用到的资源,布局及工程XML文件,最后打包成一个APK文件就可以完成应用程序的开发。

        Android框架借鉴了J2EE框架的许多设计思想,框架提供完善的服务给服务者使用, 应用程序由一个个组件组成,通过组件的启动来启动应用程序,应用程序组件借助框架运行在框架之中,框架起到了应用服务器和容器的焦色,负责为应用程序组件提供运行环境,控制应用程序组件的生命周期。

        Android框架如何实现控制应用程序组件的生命周期的呢?

       主要是主动性框架API的提供,主动性框架API的实现是借助采用反向回调( IOC)机制(又称为好莱坞原则,别调用我们,我会调用你)的模板模式来完成的。模板模式是整个ANDROID框架的核心,采用模板模式,框架为需要控制的应用程序组件在其组件基类中提供了钩子, 框架通过调用钩子实现组件的生命周期控制。因此应用程序只需在组件的派生类中重新实现钩子函数(Function Overriding),既可以实现应用程序的客制化功能,又可以实现框架主动调用应用程序,控制应用程序的运行和生命周期的目的。

       这样既可以实现多样化的应用,又能够使应用程序开发遵循同样的框架API,因此提供主动性框架API是ANDROID 框架的特征,也是目前大多数框架普遍采用的方式,J2EE框架、NET框架

        Android 框架提供的四大基本组件:

     Activity: Android 应用程序的UI(User Interface)组件,3.0以上版本又增加了Fragment。Fragment附属和依赖于Activity,作用象一个"sub activity",可以带有自己的UI,在Activity运行期间也可以具有自己独立的生命周期( 增加删除), 能够接收输入事件.能够在不同的Activity中 重用。

     Service: 非UI功能的幕后处理组件。

     Broadcast receiver: 可随时被启动来处理Intent,并执行其任务的组件。

     Content provider: 实现跨程序的共享数据之组件,提供应用程序用到的数据源。

       活动和服务是主要的运行组件,框架为两者通过IOC机制提供生命周期钩子,并在基类中提供了默认实现,钩子由框架来调用,应用程序通过派生基类,重新实现钩子回调函数,实现应用程序的客制化。

        活动的基类为activity ,服务的基类为SERVICE ,两者都提供了钩子的默认实现。

         两者都派生自Context,具体类图如下:

  

        这里采用的是Bridge模式,ContextImpl是Context虚拟类的实现类,提供与框架交互的功能,如启动另外的活动或服务,登记广播接收器和发送广播,获得系统服务管理接口。ContextWrapper是对ContextImpl类的包装,SERVICE类和Activity都是ContextWrapper的派生类,SERVICE类直接派生自ContextWrapperActivity间接派生自ContextWrapper的子类ContextThemeWrapperSERVICE类和Activity类分别在ContextWrapperContextThemeWrapper类的接口基础上添加和实现了各自的生命周期回调接口(钩子),ContextThemeWrappe的功能是ContextWrapper基础上添加了Them的支持及在通过getSystemService接口返回服务管理对象时对于LAYOUT_INFLATER_SERVICE服务做了特殊处理,采用原形模式返回一个LayoutInflater对象的克隆对象

        Activity提供的钩子,每一个对应一个生命周期状态,onCreate(活动创建时调用),onStart(活动将要显示时调用),onResume( 活动已经处于可视状态时调用),onPause(另一个活动获得焦点,本活动将要暂停时调用),onStop(活动停止时不再可视时调用),onDestroy(活动将要释放时调用).

       回调接口实现例子:

    

  @Override

      public void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);//继承默认实现

             // 在此添加新的功能

     }

 

 

                                       活动的完整生命周期

      而Fragment至少需要实现如下三个回调:

      onCreate()

             创建fragmet时调用;

     onCreateView()

            在fragmet首次显示时调用,在该回调中实现fragmet与布局视图的绑定,并返回对应fragmet布局的根视图,如果fragmet没有UI,返回NULLL。

     onPause()

            用户离开fragmet时调用。

     其它可以实现的回调:

     onAttach(Activity activity)

           当fragment 与activity绑定时调用

     onActivityCreated()

           当活动的onCreate()返回时调用。

     onDestroyView()

           当与fragment 绑定的视图被移走时调用。

     onDetach()

          当fragment与活动Detach时调用

    onDestroy()

          当fragment释放后调用

       另外还有onStart(),onStop(),onResume(),onPause(),这些接口都与绑定的活动对应的状态对应,在绑定的活动相应状态回调接口调用时同时也被调用。

下面是Fragment与附属的Activity生命周期的对应图

 

        服务的提供的钩子回调接口包括onCreate(服务创建时调用),onStartCommand(用户通过startService启动服务,服务将启动时调用),onBind(客户通过调用bindService将要绑定到服务时调用,该接口返回一个BINDER对象给客户,客户使用该BINDER对象与绑定服务通讯),onUnbind(客户通过调用unbindService已经与服务去绑定时调用),onRebind(客户通过unbindService与服务去绑定,然后重新bindService时调用),onDestroy(服务不再使用被释放时调用)。

 

 

              服务生命周期图形

 

         框架为广播接收器组件BroadcastReceiver及内容提供者ContentProvider组件提供了虚拟基类,应用程序需要实现他们的派生类. 广播组件只有一个接口需要在派生类中实现--onReceive接口(收到消息时由框架调用)。而内容提供者组件至少需要在派生类中实现onCreate接口(创建时由框架调用) , query接口(用来数据记录查询),getType接口(返回给定URI对应数据的MIME类型),update接口(更新数据记录用),insert接口(插入数据记录),delete接口(删除数据记录),这些接口除了onCreate由框架调用外其它都有客户调用,这是内容提供者组件与其它组件不一样的地方。

   上一篇                                                   版权所有,转载时请尊重原创显要位置注明链接!                                     

   下一篇

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值