当此App首次启动时,系统会自动实例化mBroadcastReceiver类,并注册到系统中。
BroadcastReceiver(广播接收器),在Android开发中,BroadcastReceiver的应用场景非常多,属于Android四大组件之一。
Android从3.0之后引入了Fragment,可以把它理解为页面的一个片段,比如一个html网页就包含一个header头部片段,以及一个body身体片段。 设计Fragment的目的是让页面布局更加灵活,不但可以随意组装和拼接各个片段,还可以只更新某个片段实现页面局部更新的功能(这个类似网页的ajax技术)。Fragment可以协助我们完成如下任务: 1、在一个页面中嵌入多个连续可翻页的子视图,方面使用ViewPager统一管理; 2、开发一些通用的小部件,内部封装好代码逻辑,可直接嵌入到任意页面。比如广告、地图等组件; 3、同一套代码可适配不同尺寸的屏幕,比如说同时适配竖屏与横屏,同时适配手机与平板等等;
当此 App首次启动时,系统会自动实例化mBroadcastReceiver类,并注册到系统中。
Android shortcuts算是比较老的技术了,现在许多诸如支付宝、百度地图等都实现了这一功能,这一功能是Android7.1推出的新功能,但是在国内app使用的还是比较少。我们先来看一下支付宝实现的效果图。
Android四大组件分别为activity、service、content provider、broadcast receiver。
Android四大组件详解 Activity(活动) 概念 Service(服务) 概念 定义与作用 Content Provider(内容提供器) 介绍 作用 系统的Content Provider 自定义Content Provider Broadcast Receiver广播 概述 广播的作用 广播接收者的创建 广播接收者的类型 注册广播的两种方式 静态注册和动态注册的区别 有序广播和无序广播的区别 有序广播接收者们的优先级 有序广播的拦截和篡改 简单介绍:Android四大核心组件指的是 Acti
BroadcastReceiver,本质上是一个全局的监听器,属于Android四大组件之一。
Hi,大家好,又双见面啦,上一期我们讲了如何使用Activity,肯定有不少小伙伴已经创建了属于自己的FirstActivity,那么这一期我们主要为大家介绍第二个重要组件-BroadcastReceiver(广播接收器)。作为Android的四大组件之二,其应用场景非常多。下面,就详细介绍下 BroadcastReceiver 的相关知识。
新建一个BroadcastTest项目,然后修改MainActivity中的代码,如下:
广播作为Android一个重要的组成部分,很多功能的实现都依赖于广播,Android系统在发生一些重要事情的时候都会发送广播(电量变化、网络变化等等)。我们也可以在自己得应用程序中发送广播信息,一些能够接受到特定的广播信息的广播接收器就能够接收到对应的广播信息。进而进行事件处理,那么首先我们来看一下广播的基本使用方法。
一、Broadcast(广播) 在Android中,有一些操作完成以后,会发送广播,比如说发出一条短信,或打出一个电话,如果某个程序接收了这个广播,就会做相应的处理。这个广播跟我们传统意义中的电台广播有些相似之处。之所以叫做广播,就是因为它只负责“说”而不管你“听不听”,也就是不管你接收方如何处理。另外,广播可以被不只一个应用程序所接收,当然也可能不被任何应用程序所接收。 (百度百科) 二、BroadcastReceiver(广播接收器) 1、自定义BroadcastReceiver 自定义广播接收器继承基
Broadcast 在Android中 Broadcast是一种 广泛运用在引用程序之间传输信息的机制。 而BroadcastReceiver 是对发送出来的Broadcaset进行过滤接受并响应的一类组件。 如果不需发送广播到别的应用 使用 LocalBroadcastManger就可以了。 发送和接收流程 发送和接受的过程: 发送 首先在需要发送信息的地方 ,把要发送的信息和用于过滤的信息(如action 和 category)封装进intent对象,然后调用 Context.sendBroadcast
BroadcastReceiver(广播接收器),属于 Android 四大组件之一,在 Android 开发中,BroadcastReceiver 的应用场景非常多。今天,我将详细讲解关于BroadcastReceiver的所有广播类型,主要分为5类:
广播(Broadcast)用于Android组件之间的灵活通信,它与Activity和Service的区别在于: 1、Activity和Service都只能一对一地通信,而Broadcast可以一对多,一人发送广播,多人接收处理; 2、对于发送者来说,广播不需要考虑接收者有没有在工作,接收者有在工作则接收广播,不在工作则丢弃广播; 3、对于接收者来说,会收到各式各样的广播,所以接收者首先要自行过滤符合条件的,然后才能进行解包处理; 4、通常情况下,Activity和Service都是在线程内部通信,而Broadcast既可用于线程内通信,也可用于线程间通信,还能用于进程间通信;
(1)四大组件中只有BroadcastReceiver既可以在AndroidManifest文件中注册,也可以在代码中注册,其他三个组件都必须在AndroidManifest文件中注册;ContentProvider的调用不需要借助Intent,其他三个组件都需要借助Intent。 (2)Activity是一种展示型组件,用于向用户展示界面,可由显式或者隐式Intent来启动。 (3)Service是一种计算型组件,用于在后台执行计算任务。尽管service是用于后台执行计算的,但是它本身是运行在主线程中的,因此耗时的后台计算仍然需要在单独的线程中去完成。Service组件有两种状态:启动状态和绑定状态。当service处于绑定状态时,外界可以很方便的和service进行通信,而在启动状态中是不可与外界通信的。 (4)BroadcastReceiver是一种消息型组件,用于在不同的组件乃至不同的应用之间传递消息,它工作在系统内部。广播有两种注册方式:静态注册和动态注册。静态注册是在AndroidManifest中注册,在应用安装的时候会被系统解析,这种广播不需要应用启动就可以收到相应的广播。动态注册需要通过Context.registerReceiver()来注册,这种广播需要应用启动才能注册并接收广播。BroadcastReceiver组件一般来说不需要停止,它也没有停止的概念。 (5)ContentProvider是一种数据共享型组件,用于向其他组件乃至其他应用共享数据。ContentProvider中的insert、delete、update、query方法需要处理好线程同步,因为这几个方法是在Binder线程池中被调用的,另外ContentProvider组件也不需要手动停止。
注册native方法有两种方式,动态注册和静态注册。静态注册是在编译时进行注册,而且在java中声明的native方法和c/c++中的本地方法的对应关系是恒定的;比如说在com.example.test包下的Test类中声明了一个stringFromJNI()的native方法,那么它对应的c/c++中的本地方法名就是Java_com_example_test_Test_stringFromJNI();并且这个方法名不能做任何的修改,在java中调用stringFromJNI()函数时,就会按包名_类名_方法名的形式找到对应的方法并调用。而动态注册是在运行时进行注册的,而且本地方法的名字可以按自己的喜好随意取,只要说明了java中声明的native方法和c/c++中的本地方法的对应关系即可。下面用代码的形式来演示一下动态注册的使用步骤。
广播作为四大组件之一,使用方式也是多种多样的,既可以自己在manifest中注册,也可以在java代码中动态注册,既可以接收由系统发出的广播,也可以接受自己定义并发送的广播。
广播,在我们的应用中起着一个非常重要的角色。就比如说我们经常使用的Intent、IntentFilter,就有着广播的作用。
image.png 面试官提了一个问题,我们来看看 😎、😨 和 🤔️ 三位同学的表现如何吧 😎 自认为无所不知,水平已达应用开发天花板,目前月薪 10k 面试官:Android 开发经常接触到的 Context 是什么呢? 😎:Context 是一个关于应用环境的抽象类,它的实现由安卓系统提供。用来访问一些应用内资源、类,也可以调用系统服务开启 Activity 、Service 、发送和接收广播等 面试官:那一个应用里有几个 Context 呢? 😎:四大组件里 Activity 和 Service 都
注:当使用系统广播时,只需要在注册广播接收者时定义相关的action即可,并不需要手动发送广播,当系统有相关操作时会自动进行系统广播
BroadcastReceiver,用于异步接收广播Intent,广播Intent是通过调用Context.sendBroadcast()发送、BroadcastReceiver()接收。
在Android中的每个应用程序可以对自己感兴趣的广播进行注册,这样该程序就只会接收自己所关心的广播内容,这些广播可能来自于系统的,也可能来自于其他应用程序的。Android提供了一整套完整的API,允许应用程序自由地发送和接收广播。发送广播就是借助之前了解过的Intent,接收广播则需要用到广播接收器(Broadcast Receiver)。. 1、广播的类型 标准广播:Normal broadcast,是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在同一时刻接收到这条广播消息,因
1)、同一个app内多个进程的不同组件之间的消息通信 2)、不同的app之间的组件之间消息通信
Android系统和Android应用程序都可以发送和接收广播,类似于publish-subscribe设计模式。广播在某个特定事件发生时被发送,例如,当各种系统事件发生时(如系统启动或设备开始充电),Android系统就会发送广播。应用程序也可以发送自定义广播,例如,通知其他应用程序他们关注的事件(如数据下载完成)。
Activity 是Android应用程序中最基本的组件,表示一个屏幕用户界面。每个Activity通常对应一个UI,用来与用户交互。Activity是用户和应用的直接交互窗口,它负责管理和处理应用的UI部分。
在android中,广播也是我们经常使用的组件,但是因为大部分使用场景简单,所以关注不多,今天就让我们来探索一下Broadcast。
① 声明 Java 层 Native 方法 : 在 Java 类中声明 native 方法 ;
我们在注册一款App的时候,如果注册成功的话,那么我们就直接跳过登陆界面,直接进入主界面,那么我们现在就通过BroadcastReceiver来实现这个功能:
是一种异步执行的广播,在广播发出之后,所有的广播接收器几乎在同一时刻接收到这条广播消息,因此它们之间没有任何先后顺序可言。这种广播效率会比较高,同时也是无法被截断或修改数据的。这种广播是全局性的,其他的应用程序都可以接受到。
Android面试题总结 Android四大组件 Activity(活动) 概念 Service(服务) 概念 定义与作用 Content Provider(内容提供器) 介绍 作用 系统的Content Provider 自定义Content Provider Broadcast Receiver(广播) 概述 广播的作用 广播接收者的创建 广播接收者的类型 注册广播的两种方式 静态注册和动态注册的区别 有序广播和无序广播的区别 有序广播接收者们的优先级 有序广播的拦截和篡改 Android类加载器 An
Android四大组件分别为activity、service、content provider、broadcast receiver。 一、android四大组件详解 1、activity (1)一个Activity通常就是一个单独的屏幕(窗口)。 (2)Activity之间通过Intent进行通信。 (3)android应用中每一个Activity都必须要在AndroidManifest.xml配置文件中声明,否则系统将不识别也不执行该Activity。 2、service (1)service用于在后台
在Activity生命周期管理 以及 插件加载机制 中我们详细讲述了插件化过程中对于Activity组件的处理方式,为了实现Activity的插件化我们付出了相当多的努力;那么Android系统的其他组件,比如BroadcastReceiver,Service还有ContentProvider,它们又该如何处理呢?
几乎每个安卓应用都无可避免的使用到广播。例如监听WIFI的开启状态、时间的获取,甚至是我们最常用的闹钟功能,都是结合着AlarmManager与广播来实现的。理解广播的注册、发送与接收实现源码将使我们更加懂安卓系统,同时,基于对广播的理解,我们也能很快的掌握AMS中其它组件的实现原理。
Android系统有一套广播消息机制,方便进行每个应用程序之间的消息通知。而且广播接受者作为Android四大组件之一,经常被使用到。我也接触到广播消息机制,因此有必要对自己所学的知识梳理整理下。
解题思路:我们可以把5张牌看成是由5个数字组成的数组。大小王是特殊的数字,我们可以把它们都定义为0,这样就可以和其他的牌区分开来。
1.在Activity中动态注册广播时,调用registerReceiver方法,会调用到ContextWrapper的registerReceiver方法:
不久之前,Google公开了Android 14的首个Developer Preview版本。
1)Activity:用户可操作的可视化界面,为用户提供一个完成操作指令的窗口。一个Activity通常是一个单独的屏幕,Activity通过Intent来进行通信。Android中会维持一个Activity Stack,当一个新Activity创建时,它就会放到栈顶,这个Activity就处于运行状态。 2)Service:服务,运行在手机后台,适合执行不需和用户交互且还需长期运行的任务。 3)ContentProvider:内容提供者,使一个应用程序的指定数据集提供给其他应用程序,其他应用可通过ContentResolver类从该内容提供者中获取或存入数据。它提供了一种跨进程数据共享的方式,当数据被修改后,ContentResolver接口的notifyChange函数通知那些注册监控特定URI的ContentObserver对象。 如果ContentProvider和调用者在同一进程中,ContentProvider的方法(query/insert/update/delete等)和调用者在同一线程中;如果ContentProvider和调用者不在同一进程,ContentProvider方法会运行在它自身进程的一个Binder线程中。 4)Broadcast Receiver: 广播接收者,运用在应用程序间传输信息,可以使用广播接收器来让应用对一个外部事件做出响应。
1、Activity是一种展示型组件。Activity的启动由Intent触发,其中Intent可以分为显式Intent和隐式Intent,显式Intent可以明确地指向一个Activity组件,隐式Intent则指向一个或多个目标Activity组件。
1. Application的生命周期 Application和Activity,Service一样,是Android框架的一个系统组件,当Android程序启动时系统会创建一Application 对象,用来存储系统的一些信息。 Application对象的生命周期是整个程序中最长的,它的生命周期就等于这个程序的生命周期。因为它是全局的单例 的,所以在不同的Activity,Service中获得的Application对象都是同一个对象。所以可以通过Application来进行一些,数据传递,数据共享,数据缓存等操作。 在Application中如果保存对象有导致内存泄漏的风险。并且在onCreate中执行耗时操作会直接影响程序的启动时间。 onCreate() 程序创建的时候执行。 onTerminate()程序终止的时候执行,当程序是被内核终止以便为其他应用程序释放资源,不会被调用。 onLowMemory()低内存的时候执行。可以用来释放一些不必要的资源来应对后台程序已经终止,前台应用程序内存还不够时的情况。 onConfigurationChanged(Configuration newConfig)配置改变时触发这个方法。 onTrimMemory(int level)程序在进行内存清理时执行。
Android 中每个应用程序都可以对自己感兴趣的广播进行注册,这样当注册的广播发出时,应用程序就会接受到。这些广播可能来自系统,也可能来自其他应用程序。
android四大组件分别为activity、service、content provider、broadcast receiver。
Android 中的广播使用了设计模式中的观察者模式:基于消息的发布/订阅事件模型。
使用Android手机的时候,我们的手机管家中经常会出现开机自启动某某app,那么对于这个某某APP来说,他是怎么知道系统什么时候开机的呢?还有,系统短信怎么知道收到了短信?以及屏幕点亮与关闭、应用卸载与安装等等。
android开发中使用AndroidManiFest.xml静态注册的BroadCastReceiver没有作用是什么原因?
微信公众号:Android研究院 关注可了解更多的Android知识,专注于移动领域,不止代码还有人生的哲学。 问题或建议,请公众号留言; 如果你觉得文章对你有帮助,欢迎赞赏[1] 前言插件中动态广播
领取专属 10元无门槛券
手把手带您无忧上云