Android基础第七天

广播接收者:

广播接收者的特点:
即使应用程序的进程不存在,当广播事件到来的时候,广播接受者的进程会自动的启动,响应广播事件
特殊广播事件
在android里面有一些产生非常频繁的广播事件,在清单文件里面配置是不会生效. 电量变化 屏幕锁屏/解锁 这些广播事件只能利用代码注册.
广播接收者创建的三个步骤
1,要有一个收音机。 写一个类 继承 一个类(BroadcastReceiver)
class SDCardStatusReceiver extends BroadcastReceiver
2,配置电池了 也就是在清单文件中配置,(Receiver)

3,调频道 设置action (IntentFilter里面)



当我们在广播接收者里面开启activity的时候,因为广播接收者的上下文是不包含任务栈的,因此直接开启activity会报错
怎么样才能不报错?(提示:加一个flag)
Intent i = new Intent(context,MainActivity.class);
//在广播接受者里面开启Activity需要记得加一个flag
// FLAG_ACTIVITY_NEW_TASK 告知Activity运行在自己的任务栈里面,因为广播接受者里面存在上下文
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);

广播接收者,收到的广播可以是android系统发出的广播,也可以收到应用程序自己发的广播,因此要知道怎么自己去发送一个广播。
Intent intent = new Intent();
//设置一个频道,理解为指定向某个电台发送信息
intent.setAction(“com.itheima.ccav.XWLB”);
//然后带上具体的数据
intent.putExtra(“key”, “dfafadfa”);
//最后发送广播
sendBroadcast(intent);//无序广播.

有序广播:
发送有序广播
Intent intent = new Intent();
intent.setAction(“com.itheima.gov.SENDMASHROOM”);
//发送有序广播
//intent 意图
//receiverPermission 权限 默认null
//resultReceiver 结果接受者 null
//消息处理器 null 默认
// Bundle null额外的数据
sendOrderedBroadcast(intent, null, new MyReceiver(), null, 1, “主席讲话: 每人10斤蘑菇”, null);

是否可以被拦截?(调用了什么方法?)
    abortBroadcast()

收到广播的顺序是由什么决定的?怎么配置?
    (优先级) 在intent-fileter 中 priority属性设置

最高值多少?最低值是多少?如果大家都把自己设置成了1000最高的优先级,谁先收到呢?
    (1000,-1000)    , 谁先装到手机上,就谁先收到
串改数据的api?拿到数据的api?
    (getResultData,setResultData)这两个方法,只有在有序广播的时候才有用!

当发送有序广播的时候,可以设置一个参数(resultReceiver)作用是什么?,
    它可以拿到广播最后的数据,即使广播被终止了!! 并且不需要在清单文件中配置

无序广播:和有序比较即可,能操作的功能很少,没有有序广播这么多。

静态注册广播 (在清单文件中配置)

动态注册广播(用代码的方式注册广播) (广播是否可以直接new出来?)
动态注册广播的api?
//注册广播接受者
receiver = new XXXXXXX();

    //就类似于在清单文件中的<intent-fileter>
    IntentFilter filter = new IntentFilter();
    //相当于清单文件里面的action标签
    filter.addAction("android.intent.action.SCREEN_OFF");
    filter.addAction("android.intent.action.SCREEN_ON");
    //最后注册广播
    registerReceiver(receiver, filter);


取消广播的api? 一般放在哪里呢?
    unregisterReceiver(receiver);
    一般放在onDestory()方法里面,


了解完基本的api之后 自己试试写一写,当我activity之间通信、传递数据的时候,
用动态注册广播的方式给另一个activity传递数据。(练习)!!!!!!

先自己敲一下,然后有什么地方卡着了,可以看我给大家的demo代码

练习一下:
短信的广播接收者  主要练习怎么将intent中的短信内容读取出来
ip拨号器   怎么串改数据!(setResultData)
以及手机屏幕解锁以及关闭的广播!!(动态注册)

服务的入门:

服务是专门放一些不需要界面显示的代码,让用户感觉上是运行在后台的一种组件
怎么创建一个服务(创建一个类,继承一个什么类?,清单文件中配置)
一个类继承service,重写一下oncreate方法,清单文件中配置标签

开启和关闭服务的代码api是什么呢? 提示; start , stop
    Intent intent = new Intent(this,DemoService.class);
    startService(intent);
    //关闭服务
    stopService(intent);

注意: 服务是运行在主线程里面(main), 不可以直接在服务里面编写耗时的逻辑.


回顾服务的生命周期  记忆的时候,和activity相比较,能理解的更深刻!
    oncreate- onstart(因为和activity的概念相冲突,因此不推荐使用了)-onstartCommand-onDestory

当多次启动服务的时候,会多次调用oncreate方法吗?会多次调用什么方法?
    不会,onCreate方法只会调用一次,onStart和onStartCommand会被调用多次

销毁的时候会多次调用ondestory方法?
    不会,只会调用一次



为什么使用服务?如果仅仅使用线程的话?于使用服务有什么区别呢?
    如果单纯的在activity中启动一个线程,然后关闭activity了,那么当前应用程序的
    进程,就会成为一个空进程了。这样的后果是空进程的优先级非常的低,因此当内存不足的时候
    很容易被回收。
    如果用了服务,那么就算activity被关闭了,因为进程中还存在着service服务,那么应用程序的
    进程优先级还是在 服务进程 这个级别的,不是很容易被回收!!!! 并且 并且 并且!就算被
    回收了,当手机内存空间又充足的时候会重新开启!!!!!!!

进程的优先级

Foreground process
前台进程: 用户正在操作的应用程序所在的进程就是前台进程
Visible process
可视进程: 用户已经不能操作这个应用程序了,但是界面用户仍然可以看到
Service process
服务进程: 应用程序有一个服务代码正在运行
Background process
后台进程: 应用程序有界面,但是界面被用户最小化(home)
Empty process
空进程: 应用程序没有任何运行的Activity,service.
前台进程>可视进程>服务进程>后台进程>空进程

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值