Android四大组件-广播接受者及入门服务

广播接收者

  • 01.系统的广播接收者的开发流程
  • 02.自定义广播接收者的编写方式
  • 03.服务的基本概念
  • 04.五种进程的优先级

定义及操作步骤

  • 广播接收者: 广而告之(全局性,整个安卓手机系统),被动接收
  • 广播接受者监听sd卡操作步骤:

    • 1.创建一个类继承BroadcastReceiver并重写onReceiver方法–例如,买收音机
    • 2.在清单文件配置–例如,装电池
      • MEDIA_UNMOUNTED表示SD卡处于挂载状态,相反.MEDIA_UNMOUNTED处于未挂载状态
    • 3.onReceiver方法,编写业务逻辑

监视开机启动事件–做开机启动应用:

* 1.创建一个类继承BroadcastReceiver并重写onReceiver方法--例如,买收音机
* 2.在清单文件配置--例如,装电池
    * app节点下:
    <receiver android:name="com.itheima.receiver.ReceiverOpenPhone" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>         
* 3.onReceiver方法,接收广播.开启界面,在广播接受者中开启界面,需要定义一个flag,告知activity运行在自己的任务栈中,广播接受者不存在上下文,intent.setFlag(Intent.FLAG_ACTIVITY_NEW_TASK);
    * 代码:
    Intent i=new Intent(context, SplashActivity.class);
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(i);
* 4.配置权限: android.permission.RECEIVE_BOOT_COMPLETED

注意:
* 通过重写onBackPressed()就可以屏蔽返回键
* 4.0版本以前不用设置权限
* 4.0版本后需要声明权限: android.permission.RECEIVE_BOOT_COMPLETED

ip拨号器–有序

* 需求,在拨电话是自动增加一个ip前缀
* 1.activity设置:
    * 1. UI界面设置layout:
    * 2. 关心控件,设置点击事件
    * 3. 业务逻辑: 获取EditText中ip前缀,用sp保存,并回显
* 2. 广播接受者设置:
    * 1.写一个类继承BroadCastReceiver,并重写onReceiver方法--买一个收音机
    * 2.清单文件设置: 
        * <receiver android:name="com.itheima.broadcastreceiver.IPCallHelperBDCReceiver" >--装电池
            <intent-filter>--调频道
                <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
            </intent-filter>
        </receiver>
* 3.权限配置: 因需要监听用户电话,需要给权限: android.permission.PROCESS_OUTGOING_CALLS

软件安装和卸载的广播接受者

  • 1.动作:安装PACKAGE_ADDED/卸载PACKAGE_REMOVED,可同时配置,表示任意一个满足
  • 2.获取动作intent.getAction,判断是什么动作
  • 3.获取应用包名称,intent.getData

短信广播接受者–会复制即可

短信: PDU
搜索安装源代码网站: grepcode.com,查看源码,最好看低版本
* 0.写一个类继承: BroadCastReceiver
* 1.动作: android.provider.Telephony.SMS_RECEIVED 
* 2.设置权限:  android.provider.Telephony.SMS_RECEIVER
* 3.获取短信数据--PDU的数据
    代码: 
    Object[] objs = (Object[]) intent.getExtras().get("pdus");
        for(Object obj:objs){
            SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) obj);
            String body = smsMessage.getMessageBody();
            String sender = smsMessage.getOriginatingAddress();
            System.out.println("body:"+body);
            System.out.println("sender:"+sender);
            abortBroadcast();
        }

广播接受者的特点

  • 即使应用程序的进程不存在,广播一到来,广播会自动开启 
  • 4.0 版本后,用户可以强行停止广播,将无法接受广播

自定义的广播接受者

  • 定义广播:
    • 1.界面中:
      • 1.编辑UI界面,关心控件,点击事件
      • 2.创建意图: Intent intent = new Intent();
      • 3.设置动作: intent.setAction(“com.itheima.ccav.XWLB”);
      • 4.发送广播: sendBroadcast(intent);//无序广播.

广播事件的类型

有序广播

* 高优先级的先得到,高优先级的可以拦截广播消息或者修改广播消息
* 缺点: 效率低
* sendOrderBroadcast...
* 获取数据getResultData()
* abortBroadcast--终止广播
* 过滤器中要配置优先级: priority最高优先级1000,最低-1000

无序广播

* ..
* 缺点: 同时接到广播,不能修改消息

动态广播接受者

手机锁屏监听–视频播放,地图应用

  • 动作: SCREEN_OFF/ON

特殊广播事件,在Android里面有一些产生频繁的广播事件,在清单文件配置是无效的

电量变化,屏幕锁屏和解锁,需要在代码中配置

在代码中配置:

service

Windows: 长期运行在后台,没有界面的进程就叫服务

Android: 长期运行在后台,没有界面的,服务是运行当前应用程序的,就叫服务

服务的父类和activity的父类是同一个对象,contextWrapper

操作步骤:
    1. 写一个类继承service
    2. 配置清单文件:
        1. service 属性name
    3. 重写oncreate
    4. 开启服务:
        1. 创建意图对象
        2. 开启服务startService(intent)
    5. 停止服务: 
        1. 创建意图对象
        2. 停止服务stopService(intent)
应用场景:
    1. 监视一个硬件是否插入
    2. 链接服务器刷新最新的数据--股票
    3. 定时轮询
注意: 服务是运行在主线程中,不能做耗时性操作

进程优先级:

在Android 中进程优先级由高到低,依次分为Foreground process、Visible process、Service process、Background process、Empty process。

Foreground process

前台进程:
1. 拥有一个正在和用户交互的Activity(也就是说Activity 的onResume()方法被执行了)。
2. 拥有一个被用户的正在交互的Activity 绑定的Service。
3. 拥有一个以“前台模式”运行的Service–该Service 已经被调用了startForeground()方法
4. 拥有一个正在执行生命周期方法的Service(onCreate()、onStart()、onDestory())
5. 拥有一个BroadCastReceiver 并且正在执行onReceive()方法

visible process

可视进程:
1. 拥有一个不是前台的Activity(onPause 方法被调用),但是对用户依然可见。这种情况(处于暂停状态的Activity)发生,比如,如果前台Activity 打开了一个dialog,该dialog 下面依然可见Activity。
2. 拥有一个被可见或者前台Activity 绑定的Service。

Service process

服务进程:
一个拥有正在运行的Service,并且该Service 是被startService()方法启动起来的进程,并且该进程没有被归类到前面的两种(前置进程和可视进程)类型,那么该进程就是服务进程

Background process

后台进程:
一个拥有对用户不可见的Activity(该Activity 已经被执行了onStop()方法)进程叫做后台进程

Empty process

空进程:
不拥有任何系统组件(指四大组件)的进程

进程的回收机制:

进程的回收顺序是:从低到高
1. 当系统内存不够用时, 会把空进程一个一个回收掉
2. 当系统回收所有的完空进程不够用时, 继续向上回收后台进程, 依次类推
3. 但是当回收服务, 可视, 前台这三种进程时, 系统非必要情况下不会轻易回收
优先级: 前台进程>可视进程>服务进程>后台进程>空进程

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值