【Android】2015.09.08 第一行代码 Day6 Count:8

本文深入探讨了Android中的广播机制,包括全局广播、本地广播的使用方式及优先级设置,同时解释了BroadcastReceiver的配置与静态接收器的实现。文章还详细阐述了Broadcast的异常情况与解决策略,如BroadcastIntent的类型设置与窗口类型调整,通过实例演示避免运行时错误的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

-----------------------------------------------
第一行代码
Day6
第五章
Broadcast
-----------------------------------------------
Questions:
1. intent立flag到底是干嘛,它的default值到底是什么?
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
删掉会报错:
android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

2. 不设置就是Null? 我能明白这玩意儿是设置窗口类型,但是它的默认值到底是什么?
alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
删掉会报错:
java.lang.RuntimeException: Unable to start receiver com.smile.broadcastbestpractice.ForceOfflineReceiver: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

Points:
1. Broadcast
把握好两个方面:
Send:
全局广播无序发: this.sendBroadcast(intent);
全局广播有序发(配合优先级): this.sendOrderedBroadcast(intent,null);
本地广播:localBroadcastManager.sendBroadcast(intent);

Receiver:
两个参数:过滤器 —> IntentFilter.addAction() && 接收器 —> BroadcastReceiver
全局广播静态接收:(这样即使程序没有启动起来也可以实现接受,做出动作)
<receiver android:name=".MyBroadcastReceiver">
    <intent-filter android:priority="100">
        <action android:name="com.smile.broadcasttest.CC_CALL"/>
    </intent-filter>
</receiver>
本地广播动态接收:(能本地发送,程序一定启动了)
LocalBroadcastRecevier localBroadcastRecevier = new LocalBroadcastRecevier();
IntentFileter intentFilter new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
localBroadcastManager.registerReceiver(localBroadcastRecevier,intentFilter);

2.静态方法里用的都是静态变量,所以静态变量请在定义时初始化,而不是在构造函数中初始化,因为使用静态方法时不会调用构造函数的哦。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值