Android 的一个活动一般对应界面中的一个屏幕显示,可以理解成一个界面,每一个活动在界面上可以包含按钮、文本框等多种可视的 UI 元素。...(2)广播接收器(BroadcastReceiver) 广播接收器用于让应用程序对一个外部事件做出响应。例如:电话呼入事件、数据网络可用通知或者到了晚上时进行通知。...活动完全退出的情景:当使用回退(Back)按钮退出活动时,onDestroy()方法将被调用,活动关闭。...广播接收器的生命周期 广播接收器有一个单一的回调方法 onReceive(),当广播消息到达接收器时,Android 将调用这个方法,并传递给包含在这个消息中的 Intent 对象。...广播接收器只有在这个方法的执行过程中才处于活动状态,当 onReceive()返回后,广播接收器将不再处于活动状态。广播接收器的功能类似于一个回调函数,只是单次运行时处于活动状态。
(2)广播接收器(BroadcastReceiver) 广播接收器用于让应用程序对一个外部事件做出响应。例如:电话呼入事件、数据网络可用通知或者到了晚上时进行通知。 ...Activity完全退出的情景:当使用回退(Back)按钮退出Activity时,onDestroy()方法将被调用,Activity关闭。...3.广播接收器的生命周期 广播接收器有一个单一的回调方法onReceive(),当广播消息到达接收器时,Android将调用这个方法,并传递给包含在这个消息中的Intent 对象。 ...广播接收器只有在这个方法的执行过程中才处于活动状态,当onReceive()返回后,广播接收器将不再处于活动状态。广播接收器的功能类似于一个回调函数,只是单次运行时处于活动状态。...5.5 菜单的使用 在Android中具有单独接口,用于在活动中使用菜单。本例使用一个菜单来控制按钮的背景颜色,从其中可以了解如何在应用程序中使用菜单。
removeStickyBroadcast(intent)主动把它去掉 注意:发送广播时的intent参数与Contex.startActivity()启动起来的Intent不同,前者可以被多个订阅它的广播接收器调用...,后者只能被一个(Activity或service)调用 监听广播Intent步骤: 1> 写一个继承BroadCastReceiver的类,重写onReceive() 方法,广播接收器仅在它执行这个方法时处于活跃状态...也就是说哪怕app本身未启动,该app订阅的广播在触发时也会对它起作用 系统常见广播Intent,如开机启动、电池电量变化、时间改变等广播 Service 服务: 一个Service 是一段长生命周期的...而一个广播接收器仅在响应广播信息的时候激活。所以,没有必要去显式的关闭这些组件。...被系统销毁杀掉时系统调用,(整个生命周期只调用1次)用来释放onCreate ()方法中创建的资源,如结束线程等 2.2.3 3个嵌套循环 1.Activity完整的生命周期:从第一次调用onCreate
调用ActivityCollector类的方法,如类中的onCreate和onDestroy方法,所有从父类派生出去的子类,在创建时会被加入ActivityCollector的数组activities里面...,销毁时则会从里面被移除;用数组activities统筹本项目的活动,可以很容易实现销毁所有活动的功能; 其二,随后我们将重写本类的onResume和onPause方法,所有从父类派生出去的子类,在栈顶状态...(onResume()方法执行之后的处于准备交互的状态)都会注册一个接收器,接收广播信息,收到广播信息后执行onReceive方法,弹出对话框,随后销毁所有活动,重新启动LoginActivity,实现强制下线...如类中的onCreate和onDestroy方法,所有从本类派生出去的子类,在创建时会被加入ActivityCollector的数组activities里面,销毁时则会从里面被移除; 其二,随后我们将重写本类的...点击按钮,弹出对话框,强制下线: ?
有序广播: 是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够接收到这条广播消息,当这个广播接收器中的逻辑执行完毕之后,广播才会继续传递。所以此时的广播接收器是有前后顺序的。...强制下线的功能思路也比较简单,只需要在界面上弹出一个地画框,让用户无法进行其他操作,必须要点击对话中的确定按钮,然后回到登录界面即可。借助于广播,我们就可以轻松实现这个功能。...,首先将 LoginActivity 的继承结构改为继承自 BaseActivity ,然后调用了 findViewById() 方法分别获取到输入框中的信息,然后再登录按钮里使用了一个简单的...解决办法就是,只需要在BaseActivity中动态注册一个广播接收器就可以了,因为所有的活动都是继承自BaseActivity的。...然后使用setPositiveButton()方法来给用户对话框注册确定按钮,当用户点击了确定按钮时,就调用强制下线功能来销毁所有活动,并重新启动登录界面。
四个主要的应用程序组件是: 活动 服务 广播接收器: 内容提供商: 活动:它处理 UI 和用户与屏幕的交互。换句话说,它是一个包含活动的用户界面。这些可以是一个或多个,具体取决于应用程序。...例如,当手机的电池电量不足时,Android 操作系统会触发广播消息以启动省电功能或应用程序,在收到消息后,应用程序会采取适当的措施。...它还包含应用程序的硬件和软件功能,这些功能决定了应用程序在 Play 商店中的兼容性。它还包括特殊活动,如服务、广播接收器、内容提供者、包名称等。...Java 文件夹: JAVA文件夹包含执行应用程序后台任务所需的 java 文件。它由按钮、计算、存储、变量、toast(小弹出消息)、编程功能等功能组成。这些文件的数量取决于创建的活动类型。...Android App中Activity的生命周期 Android App中Activity的生命周期可以通过这张图来展示: Android 生命周期的状态: 1.OnCreate:首次创建活动时调用
set JAVA_HOME=C:\jdk1.6.0_15 你也可以右键单击"我的电脑",选择"属性"=》“高级”=》“环境变量”,然后通过按下"确定"按钮来更新 PATH 值。...举个例子,服务可以是用户在使用不同的程序时在后台播放音乐,或者在活动中通过网络获取数据但不阻塞用户交互。...一个服务是Service类的子类,如下所示: public class MyService extends Service { } Broadcast Receivers 广播接收器简单地响应从其他应用程序或者系统发来的广播消息...举个例子,应用程序可以发起广播来让其他应用程序指导一些数据已经被下载到设备,并且可以供他们使用。因此广播接收器会拦截这些通信并采取适当的行动。...广播接收器是BroadcastReceiver类的一个子类,每个消息以Intent对象的形式来广播。
不要在广播接收器的onReceive()方法中添加过多的逻辑或者进行任何耗时操作,因为在广播接收器中是不允许开启线程的,当onReceive()方法运行太长时间而没有结束时,系统会报错。...,我们可以在我们的广播接收器中的onReceive()方法的逻辑中对该广播进行截断,截断广播的方法也很简单,直接调用abortBroadcast();方法就可以了。...5、在广播接收器中启动活动 在广播接收器中也可以启动一个活动,但是我们启动活动之前必须给intent加入FLAG_ACTIVITY_NEW_TASK标志,否则将无法启动。...下面的代码是创建一个广播接收器,在接收到广播后弹出一个警告对话框,并且设置该对话框不可取消,只能通过点击确定按钮来启动另一个活动页面。...,第一个参数是按钮上显示的text, 11 //第二个参数是添加点击确定按钮的响应事件,这里我们设定为启动一个登陆界面 11 dialogBuilder.setPositiveButton
实现强制下线功能 思路:需要在界面上弹出一个对话框,让用户无法进行任何其他操作,必须要点击对话框中的确定按钮,然后回到登录界面即可。...中的代码按钮的点击事件里面发送了一条广播 7.创建一个广播接收器了,新建ForceOfflineReceiver 8.对AndroidManifest.xml文件进行配置:声明权限、对LoginActivity...这是第6步//在按钮的点击事件里面发送了一条广播,广播的值为com.example.broadcastbestpractice.FORCE_OFFLINE,这条广播就是用于通知程序强制用户下线的。...然后使用setPositiveButton()方法来给对话框注册确定按钮,当用户点击了确定按钮时, 就调用ActivityCollector的finishAll()方法来销毁掉所有活动,并重新启动LoginActivity...另外,由于在广播接收器里启动活动的, 因此一定要给Intent加入 FLAG_ACTIVITY_NEW_TASK这个标志。
动态注册:也称为运行时注册,也就是在Service或者Activity组件中,通过Context.registerReceiver()注册广播接收器。...通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下,去调用以下方法。意图明确,指定了要激活的组件是哪个组件,一般是在相同的应用程序内部实现的。...具体广播限制和对应赦免清单 如果应用注册了广播接收器,那么每次发送广播后,应用的广播接收器就会消耗资源,如RAM,CPU等。如果有很多应用对系统事件广播注册广播接收器,这....,就会很卡的嘛!...DevicePolicyManager.ACTION_DEVICE_OWNER_CHANGED */ "保留原因:此广播发送得不是很频繁;一些应用需要接收它,以便知晓设备的安全状态发生了变化" /*...动态通过调用 Context.registerReceiver()注册广播接收器而不是在清单中声明接收器。 使用JobScheduler,这个网上找一下,有很多教程,就不细说了。
正文 当用户操作Settings -> Manage Apps -> Selects a particular application时,会收到一条包含其应用程序包名作为extras的广播消息 android.intent.action.QUERY_PACKAGE_RESTART...当我们点击卸载按钮时,会打开卸载确认界面com.android.packageinstaller.UninstallerActivity。 ?...卸载确认界面 我们应监听android.intent.action.QUERY_PACKAGE_RESTART广播,如果发现广播中的extras中的包名与应用程序匹配,我们就启动一个后台线程,并利用ActivityManager...当用户点击管理应用程序的设置下的卸载按钮,我们将执行我们的预卸载任务然后要求用户确认窗口,但是用户可以确认卸载或可以取消操作,上述实现并没有考虑到用户点击取消卸载按钮的逻辑。...我希望这个方法可以帮到你,这是我目前知道的唯一不需要Root权限能够在卸载前拦截的方法。
共有四种模式可与 Intent 对象中的Activity 标记(FLAG_ACTIVITY_* 常量)协同工作,以确定在调用 Activity 处理 Intent 时应执行的操作。...Intent 过滤器声明其父组件的功能 Activity 或服务可执行哪些操作,以及接收器可处理哪些类型的广播。它让组件可以接收所通告类型的 Intent,同时过滤掉对组件没有意义的 Intent。...广播接收器允许应用接收由系统或其他应用广播的 Intent,即使应用的其他组件并没有运行也是如此。让系统知道广播接收器有两种方法:一种方法是使用此元素在清单文件中声明广播接收器。...另一种方法是在代码中动态创建接收器,并使用 Context.registerReceiver() 方法注册接收器。 android:exported 广播接收器是否可以接收来自其应用外部来源的消息 。...如果设为 true 并且 targetSdkVersion 设为 17 或更高版本,则系统会激活和使用各种 RTL API,以便您的应用可以显示 RTL布局。
,同一时刻只会有一个广播接收器能够收到这条广播消息,当这个广播接收器中的逻辑执行完毕之后,广播才会继续传递。...这是通过在呼叫时提供自己的广播收发器来实现的,它将被视为广播结束时的最终接收器-ITSBroadcastReceiver.onReceive(Context, Intent)方法将使用从其他接收方收集的结果值调用...)方法中添加过多的逻辑或进行任何耗时操作,因为在广播接收器中是不允许开启线程的,当onReceive()方法进行了较长时间而没有结束时,程序就会报错。...因此广播接收器更多的是扮演一种打开程序其他组件的角色。如创建一条状态栏通知,或者启动一个服务等。...这是因为我们始终需要保证只有处于栈顶的活动才能接收到这条强制下线广播,非栈顶的活动不应该也没有必要去接收这条广播,所以写在onResume()和onPause()方法里就可以很好的解决这个问题,当一个活动失去栈顶位置时
service分为两种: (a)started(启动):当应用程序组件(如activity)调用startService()方法启动服务时,服务处于started状态。...4、broadcast receiver (1)你的应用可以使用它对外部事件进行过滤,只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。...静态注册无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开着的。也就是说哪怕app本身未启动,该app订阅的广播在触发时也会对它起作用。...(2)4大组件的激活 内容提供者的激活:当接收到ContentResolver发出的请求后,内容提供者被激活。而其它三种组件activity、服务和广播接收器被一种叫做intent的异步消息所激活。...(3)4大组件的关闭 内容提供者仅在响应ContentResolver提出请求的时候激活。而一个广播接收器仅在响应广播信息的时候激活。所以,没有必要去显式的关闭这些组件。
此后,我将向您展示如何在实践中实施和使用它们。 什么是Stream? 介绍 为了便于想象Stream的概念,我们可以简单把Stream想象为一个有两个端口的管道,只有其中的一个允许插入一些东西。...只要至少有一个活动侦听器,Stream就会开始生成事件,以便每次都通知活动的StreamSubscription对象: 一些数据来自流, 当一些错误发送到流时, 当流关闭时。...广播Stream 这是第二种类型Stream,这种Stream允许任意个数的监听器。 可以随时向广播流添加监听器。 新的监听器将在它开始收听Stream时收到事件。...解释和说明: 第24-30行:我们正在监听stream,每当stream输出一个新的值,我们将用该值更新Text; 第35行:当我们点击FloatingActionButton时,我们递增计数器并通过接收器将其发送到...换句话说,从事件(例如,点击),变量的变化,消息,......到构建请求,可能改变或发生的所有事物的所有内容将被传送,由数据流触发。
service分为两种: (a)started(启动):当应用程序组件(如activity)调用startService()方法启动服务时,服务处于started状态。...4、broadcast receiver (1)你的应用可以使用它对外部事件进行过滤,只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。...也就是说哪怕app本身未启动,该app订阅的广播在触发时也会对它起作用。...2、4大组件的激活 内容提供者的激活:当接收到ContentResolver发出的请求后,内容提供者被激活。 其它三种组件activity、服务和广播接收器被一种叫做Intent的异步消息所激活。...3、4大组件的关闭 内容提供者仅在响应ContentResolver提出请求的时候激活。而一个广播接收器仅在响应广播信息的时候激活。所以,没有必要去显式的关闭这些组件。
在设备之间建立局域网内的信号发送与接收通道,确保数据可以稳定安全地进行传输。下面我们一起来看看如何在Windows系统上对它进行安装与激活。...这里我选择Windows 通用版进行下载。下载后我们会得到一个MSI格式的安装包,双击打开它,再点击“运行”按钮开始运行安装程序。...一路点击“Next”进入到下图所示界面中,在此界面中,我们点击安装组件前的图标按钮,然后选择“Entire feature will be installed on local hard drive”,...随后,会跳转到桌面版的安装界面,如图,我们点击“安装”按钮进行安装即可。三、激活步骤了解完安装步骤,我们再看看如何激活AirServer软件。...在激活页面中,我们只需要将急活嘛复制粘贴到对应的“Activation Code”输入框中,点击下一步校验急活嘛即可完成急活。
:name="com.trampcr.musicplayer.PLAY_ACTION"/> 点击发送广播按钮,可以看到收到广播的提示...,可以看到先显示第一个广播接收器中的内容,再显示第二个广播接收器中的内容,如下: ?...;当点击Activity的界面按钮时,系统将通过发送广播通知后台Service来改变播放状态。...所发出的广播,该程序将会根据广播Intent里的消息来改变播放状态,并更新程序界面中按钮的图标。...onClick中根据点击的按钮发送广播,发送广播时会把所按下的按钮标识发送出来。 接下来是后台Service,会在播放状态发生改变时对外发送广播。
这个也很好理解,当跳转的另外一个界面,之前的界面还在后台,按回退按钮还会恢复原来的状态,大部分软件在打开的时候,直接按Home键,并不会关闭它,此时的Activity就是Stopped状态。...1.2 有序广播(Ordered broadcasts) 是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够收到这条广播消息,当这个广播接收器中的逻辑执行完毕后,广播才会继续传递。...动态注册:必须在代码中执行 受activity的生命周期影响 当广播为有序广播时: 同优先级的广播接收器,静态注册优先级高于动态注册 同优先级的同类广播接收器,静态广播:先扫描的优先于后扫描的。...动态广播:先注册得优先于后注册的。 当广播为标准广播时: 无视优先级,动态广播优先于静态广播接收器 同优先级的同类广播接收器,静态广播:先扫描的优先于后扫描的,动态:先注册的优先于后注册的。 6....如果 BroadcastReceiver 结束了,它的宿主进程还在运行,那么子线程还会继续执行。但宿主进程此时很容易在系统需要内存时被优先杀死,因为它属于空进程(没有任何活动组件的进程)。
你的应用程序不用并入其他应用程序的代码或链接到它。相反,当需求产生时它只是启动其他应用程序块。...一个应用程序可能只包含一个活动,或者像刚才提到的短信应用,它可能包含几个活动。这些活动是什么,以及有多少,当然这取决于它的应用和设计。一般来讲,当应用程序被启动时,被标记为第一个的活动应该展示给用户。...例如,一个视图可能显示一个小的图片和当用户点击图片时发起一个行为。...像活动(activities)和其他组件一样,服务(services)运行在应用程序进程中的主线程中。因此,他们将不会阻止其他组件或用户界面,他们往往产生其他一些耗时的任务(如音乐播放)。...由于每个接收者依次执行,因此它可以传播到下一个接收器,也可以完全终止传播以便他不会传递给其他接收者。
领取专属 10元无门槛券
手把手带您无忧上云