Android的四大组件的理解

1.Activity

   生命周期如图
   ![这里写图片描述](http://hi.csdn.net/attachment/201109/1/0_1314838777He6C.gif)

首先说一下activity的四种状态,

  • Running 一个新的activity启动到栈的时候,它在屏幕的最前端,属于激活的状态.
  • Paused 当一个activity被一个Dialog(可以理解为一个弹出的窗口),或者popwindow(弹窗)覆盖的时候,它依然和窗口管理器保持连接,系统继续维护其内部的形态,所以它仍然可见,但他可能已经失去了焦点.
  • stoped 当activity被另一个activity覆盖的时候,不可见了,就处于stoped的状态.
  • Killed 当系统杀死或者回收没有处于启动状态的activity的时候处于killed的状态

    说一下周期方法
    onCreate:当activity第一次启动的时候执行的方法可以在这个方法中做一些初始化的工作,
    onStart:触发该方法,表示要展示给用户看.
    onResume:第一次启动会调用该方法,当activityonPause和onStop之后又开始了activity的时候会调用到,也就是当需要和用户发生交互的时候都需要用到这个方法,
    onPause 当有一个前台的活动,需要activity转到后台的时候触发这个方法.这个时候需要将activity持久化,
    onStop 当一个activity不需要展示给用户的时候触发该方法,如果内存不够用,系统会直接结束这个activity,所以保持数据应该是在onPause的时候做,
    onRestart, 当系统由stoped的状态再次展示给用户的时候系统触发该方法,
    onDestory: 当activity销毁的时候触发的方法.
    还有一个方法也是activity的周期方法,
    onSaveInstanceState,系统调用该方法,允许活动保存之前的状态,比如一串字符串中光标的位置等,通常情况下开发和不需要重写该方法,在默认的实现中,已经提供了自动保存活动所涉及到的用户界面组件的所有状态信息
    

每一个activity都是一个单独的界面,利用intent传递数据

activity的启动模式

  • standard 默认模式,在默认状态下创建一个新的activity示例,例如我打开了一个activity A1,如果我再次打开这个activityA1的时候,就会又创建了一个A1,而且是在一个栈中存在的
  • singleTop 可以有多个示例但是不允许相同activity在一个栈中存在,当activity在栈顶的时候,启动activity而不创建示例,而会调用onNewIntent方法.
    例如,有两个activity B1,B2两个activity的内容功能相同,都有两个按钮可以跳转B1.B2.唯一不同的是B1为Standard ,B2为singleTop.
    若我打开的顺序为B1->B2->B2,实际打开是B1->B2,只是调用了前一个的onNewIntent方法
    如果我打开B1->B2->B1->B2,则实际顺序就是B1->B2->B1->B2.
  • singleTask 只有一个实例,在同一个应用程序中启动他的时候,若activity不存在,则会在当前的任务栈中创建一个实例,若存在,则会把task中在其上的所有activity都销毁,并调用它的onNewIntent方法.如果在别的应用程序中启动它,则会新建一个task,并在该Task中启动这个activity,singleTask允许别的activity与其在一个Task中共存,
  • singleInstance 一个应用程序只有一个示例而且这个实例独立运行在一个Task中,这个Task只有这个实例,不允许有别的activity存在.

    2.Service

服务的用途:服务是执行在后台的,启动了activity在后台执行,比如播放多媒体,
检测sd卡上面的文件变化,后台记录你的地理信息位置的变化,

服务的启动模式:有两种1.startService 2.bindService

服务的分类: 本地服务(安卓自带的应用于程序的内部)和远程服务(用于系统内不得应用程序之间)

生命周期 context.startService->onCreate->onStart->onDestory
context.bindService->onCreate->onBind()->onUnbind->onDestory

两种启动模式的区别
onStart->启动 必须调用stopService 服务结束
bindService->一旦调用者退出,服务终止

3.BroadCastReceiver
broadCastReceiver用于异步接收广播intent

    分类
    1.有序广播
    Context.sendOrderBroadcast()发送每次被发送到一个Receiver.所谓的有序,就是每一个Receiver执行后可以传播到下一个Receiver也可以中间终止广播.而Receiver运行的顺序可以通过matched Intent-filter里面的priority来设置优先级控制,
    2.无需广播
    context.sendBroadCast()发送 是完全异步的.他们都运行在一个未定义的顺序,通常是在同一个时间,这样会更有效,这就意味着不能包含所要使用的结果或者终止的API
    广播是没有可视化的界面来显示广播信息的,可以通过notifacation和notification Manager来实现可视化.包括图标和震动信息.

    生命周期
    一个广播对象只有在被调用onreceiver的时候才有效,当函数返回后,生命周期结束.
    注意:onreceiver里面不能使用线程来执行.对于耗时的操作用服务的形式来完成,因为onreceiver结束的时候broadcastreceiver可能已经无效了.

注册Receiver

1.静态注册
在配置文件里面添加代码
    <receiver android:name=".SMSReceiver">

  <intent-filter>

  <action android:name="android.provider.Telephony.SMS_RECEIVED" />

  </intent-filter>

  </receiver>                       
    2.动态方式注册
public class HelloDemo extends Activity {    
        private BroadcastReceiver receiver;    

        @Override 
        protected void onStart() { 
                super.onStart(); 

                receiver = new CallReceiver(); 
                registerReceiver(receiver, new IntentFilter("android.intent.action.PHONE_STATE")); 
        } 

        @Override 
        protected void onStop() { 
                unregisterReceiver(receiver); 
                super.onStop(); 
        } 
}
静态方式注册方便管理                                   

4.ContentProvider
contentProvider内容提供者是Android的四大组件之一,主要用于对外共享数据,也就是把应用中的数据共享给其他的应用访问,

参考了
http://www.cnblogs.com/pepcod/archive/2013/02/11/2937403.html的博客

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章