Activity生命周期
        一个对象从创建到销毁中间经历的状态


创建--->运行  onCreate  onStart   onResume
可见可操作

运行--->销毁  onPause  onstop  ondestory

运行--->停止(不可见  不可操作)
               onPause  onstop
              停止--->恢复
               onReStart  onStart  onResume  
              
运行--->暂停 (可见  不可操作)  onPause
              暂停--->恢复       onResume

当Activity处于暂停或是停止状态的时候,更高优先级的应用需要内存时
activity可能会被终止


Service服务   运行在后台,没有界面
            
创建Service要素
    1、继承service
    2、清单文件中进行配置
    android:name="com.example.ex_service.MyService"
    包名.类名
    
启动服务:
    调用startService(service );
    注意:
        第一次启动服务的时候,会调用onCreate  onStartCommand
        当服务没有被结束之前,多次点击只会调用onStartCommand方法

关闭服务:
    调用stopService(service );


绑定服务:
    调用bindService(service, conn, Context.BIND_AUTO_CREATE);
    参数:
    第一个:Intent对象
    第二个:ServiceConnection对象(需要声明称成员变量)
    第三个:Context.BIND_AUTO_CREATE
            当我们绑定服务的时候,如果服务不存在,会自动创建
    
    调用 oncreate  onBind

解除绑定:
    调用unbindService(conn);
    
    调用 onUnBind  onDestory


通过绑定去调用service中的方法步骤:
    1、去声明一个普通类Mybinder,继承Binder
    2、在类Mybinder类里面,调用service服务里的方法
    3、创建一个Mybinder类型的对象
    4、在OnBind()方法中,去返回Mybinder对象
    5、在activity里的onServiceConnected中,去获取IBinder类型的对象
       然后只需把它强转称Mybinder类型的对象就可以了
       这样就能去调用Mybinder类型的对象里面的方法了
       
注意:
    onBind()返回一个非空的IBinder对象时,
    onServiceConnected这个方法才会被调用  


BroadCastReciver广播接收者
特性:单向   群发

广播的创建的要素:
    1、创建的类继承BroadcastReceiver
    2、重写onReceive()方法
    3、在清单文件进行配置
    android:name="com.example.ex_broadcastreciver.MyReceiver"
    包名.类名
    
    
    场景:
    1、接收外部的广播
        收短信
        
        权限
        <uses-permission android:name="android.permission.RECEIVE_SMS"/>
        
        在清单中进行配置
        <intent-filter >
            <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
        </intent-filter>
        
        
    2、创建应用  自己发广播
        
        Intent intent = new Intent();
        //设置广播的过滤条件
        intent.setAction("www.sss.com");
        //发送广播
        sendBroadcast(intent );
    
    跨进程通讯
   



    在代码中去设置广播
        1)  MyReceiver receiver = new MyReceiver();
        2)  在onstart()方法中注册:
            IntentFilter filter = new IntentFilter();
            filter.addAction("www.sss.com");
        3)  注册广播接收者
            registerReceiver(receiver , filter );
        
        4)  在onstop()注销广播
            super.onStop();
            unregisterReceiver(receiver);
        
        
         
两种广播的区别:
    xml :只要条件匹配,就会触发(不管应用是否开启)
    code:灵活控制