比如我在 deepin v25 系统上从应用商店下载安装了剪映(Windows)版,点击时出现闪退。作为一名程序员,自然就会想弄清楚到底发生了什么?...下面就以剪映这款应用,分析一下从点击应用,到应用程序启动这个过程中,会有哪些处理流程。如下分析借助了 AI。...在安装应用程序之后,会在启动器上添加一项程序入口,这是通过在 /usr/share/applications/ 目录添加一个 .desktop 实现的。...这也可以解释为什么 Wine 应用为什么第一次启动会慢一些,因为第一次启动涉及 Wine 容器的创建等初始化动作,后面再启动就可以省掉这个动作,直接启动应用程序。...总结一下,一个完整的执行流程(以剪映为例)为: 用户点击剪映图标,执行了用户应用程序目录下的 run.sh 脚本。
问题 因为项目需要迁移到8.0平台,发现有一个系统应用打不开,从log发现如下描述: BroadcastQueue: Background execution not allowed: receiving...这些状态通常是由于广播引起的:某些广播或广播的发送相对频繁,许多应用程序正在通过清单进行监听(因此需要启动以接收它),但是没有足够的RAM来保留所有状态这些应用程序的进程在缓存中进行处理,因此,每次发送广播时...ACTION_PACKAGE_DATA_CLEARED 仅当用户从“设置”中明确清除其数据时才发送,因此广播接收器不太可能严重影响用户体验。...ACTION_PACKAGE_FULLY_REMOVED 某些应用可能需要在删除另一个软件包后更新其存储的数据; 对于这些应用,没有什么好办法可以注册此广播。...如果在单个进程中使用广播在应用程序组件之间进行通信,请切换为使用LocalBroadcastManager。 如果使用广播在自己的多个进程中的应用程序组件之间进行通信,请切换为使用显式广播。
onReceiver() 方法中涉及与其他组件之间的交互时,可以使用发送 Notification 、启动 Service 等方式,最好不要启动 Activity。...从 Android 8.0 开始,对于大多数隐式广播,不能在 AndroidManifest 文件中声明接收器。...1.7 本地广播 本地广播机制使得发出的广播只能够在应用程序的内部进行传递,并且广播接收器也只能接受来自本应用程序发出的广播,则安全性得到了提高。...安全问题 BroadcastReceiver 设计的初衷是从全局考虑可以方便应用程序和系统、应用程序之间、应用程序内的通信,所以对单个应用程序而言BroadcastReceiver 是存在安全性问题的...耗时操作会导致 ANR 另一方面 BroadcastReceiver 启动时间较短。 如果一个进程里面只存在一个 BroadcastReceiver 组件。并且在其中开启子线程执行耗时任务。
一、 onCreate :当活动第一次启动的时候,触发该方法,可以在此时完成活动的初始化工作。 ...3.Broadcast Receiver 是Android应用中另一个重要的组件,BroadcastReceiver代表广播消息接收器。...从代码实现角度来看,BroadcastReceiver非常类似于事件编程中的监听器。...通常与ContentProvider结合使用的是ContentResolver,一个应用程序使用ContentProvider暴露自己的数据,而另一个应用程序则通过ContentResoler来访问数据...Intent可以启动应用中另一个Activity,Service,BroadcastReceiver。
那么什么时候会启动应用的进程呢,答案就是什么时候用到应用程序就启动,这种 ‘ 懒汉模式 ‘。...当用户或者其他应用程序用到了属于你的应用程序的组件,比如 ( Activity ,Service ) Android 就会为你的应用程序启动一个新的进程(你的应用进程不存在当前 Android 系统中时...每个应用都有独立的进程,默认情况下,每个应用程序都运行在自己的进程,并且启动一个主线程工作。...当你的应用程序 需要打开相册功能就会打开系统的相册应用,因为你的应用和相册应用都有自己独立的应用进程,通过启动相册的操作,在一个进程中启动另外一个进程,这适用于其他应用程序里面的每一个组件。...启动应用程序可以分为三个步骤 创建一个进程 绑定应用程序 启动一个 Activity ?
静态注册广播接收器 如果你在manifest中注册一个广播接收器,且应用程序没有运行,系统就会在广播发送时启动你的应用程序。...然后,广播接收器就成为应用程序的一个单独的入口点,即如果应用程序当前没有运行,系统可以通过广播启动应用程序。系统将创建一个新的BroadcastReceiver组件对象来处理每个接收到的广播。...然而,一旦你的代码从onReceive()返回,BroadcastReceiver就不再active。...因此,您不应该在BroadcastReceiver中启动长时间运行的后台线程。onReceive()执行完后,系统可能杀死进程以随时回收内存,并终止运行在这个进程中的线程。...2、 如果许多应用程序在其manifest中注册接收相同的广播,这可能导致该系统启动大量应用程序,从而对设备性能和用户体验造成重大影响。为了避免这种情况,尽量用动态注册替代静态注册。
前面学习Activity时己经多次使用了 Intent,当一个Activity需要启动另一个Activity时, 程序并没有直接告诉系统要启动哪个Activity,而是通过Intent来表达自己的意图...Intent不仅是封装Android应用程序需要启动某个组件的“意图”,还是应用程序组件之间通信的重要媒介。本节开始来学习Intent的使用。...一、Intent介绍 Intent最常见的用途是绑定应用程序组件,并在应用程序之间进行通信。尽管 Intent 可以通过多种方式促进组件之间的通信,但其基本用例主要包括以下三个: 1....Intent 描述了要启动的服务,并携带了任何必要的数据。 如果服务旨在使用客户端-服务器接口,则通过将 Intent 传递给 bindService(),可以从其他组件绑定到此服务。 3....com.jinyu.cqkxzsxy.android.intent.SecondActivity"); startActivity(intent); 在上述实例代码中,通过setClassName(包名,类全路径名)方法指定要开启组件的包名和全路径名来启动另一个组件
当Android检测到以下某种情况时,它将显示特定应用程序的ANR对话框: 在5秒内无响应输入事件(如按键或屏幕触摸事件)。 一个 BroadcastReceiver 尚未在10秒内完成执行。...如何避免ANR Android应用程序通常完全在单个线程上运行,默认为“UI线程”或“主线程”。...但是,与其通过辅助线程执行密集任务,您的应用程序还应该启动IntentService如果需要对意图广播采取可能长时间运行的操作。...另一个共同的问题是BroadcastReceiver对象执行过频繁时发生。频繁的后台执行可以减少其他应用程序可用的内存量。...如果您的应用程序具有耗时的初始设置阶段,请考虑尽快显示启动画面或渲染主视图,指示正在加载并异步填充信息。在任何一种情况下,您都应该以某种方式表明正在取得进展,以免用户认为应用程序被冻结。
生命周期:在整个的生命周期,从onCreate(Bundle)开始到onDestroy()结束。从onStart()开始到onStop()结束。从onResume()开始到onPause(()结束。...5.广播接收器 BroadcastReceiver BroadCastReceiver是Android四大组件之一,主要用于接收系统或者app发送的广播事件。广播分两种:有序广播和无序广播。...8.Activity启动模式 standard是活动默认的启动模式,在不进行显式指定的情况下,所有活动都会自动使用这种模式。标准启动一个新的activity压入栈中。...singleTop是在启动活动时如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它。 singleTask是如果每次启动时系统首先会在返回栈中检查是否存在该活动的实例。...singleInstance是两个应用都要调到activity,如果发现另一个应用存在activity栈则共享不新建。
基于广播的信息发布和通信 广播是一种 Android 系统提供的信息发布机制,它允许应用程序向其他应用或系统组件发送消息,并且可以接收其他应用或系统组件发送的消息。...使用广播机制时需要定义一个自己的 BroadcastReceiver,以便接受和处理广播消息。...基于Intent的数据传递 Intent 是 Android 应用之间进行通信和数据传递的重要工具,它可以在应用程序中启动 Activity,启动服务或者发送广播,同时也可以传递数据。...Activity 时,将 data 字符串值通过 Intent 传递给了另一个应用的 Activity。...目标 Activity 在接收 Intent 数据之后,从 Intent 中取出了 data 字符串并在日志中输出。
前言 小伙伴们,在上文中我们介绍了Android组件Service,本文我们继续盘点介绍Android开发中另一个非常重要的组件BroadcastReceiver。...它允许应用程序在某些事件发生时收到通知并采取相应操作。 BroadcastReceiver通过注册到系统中指定的广播过滤器来接收广播消息。...如果BroadcastReceiver需要与其他组件进行通信,可以使用发送广播、启动服务等方式实现。...在接收到广播时,可以使用该属性进行相关操作,如启动服务、发送广播等。...它提供了一种机制,允许应用程序间的通信和交互,使得不同组件能够及时响应和处理相关的消息。
Android应用可以通过广播从系统或其他App接收或发送消息。类似于订阅-发布设计模式。当某些事件发生时,可以发出广播。 系统在某些状态改变时会发出广播,例如开机、充电。App也可发送自定义广播。...因此广播接收器一般用来打开其他组件,比如创建一条状态栏通知或启动一个服务。 新建一个MyExampleReceiver继承自BroadcastReceiver。...应用在需要通知各个广播接收者的情况下使用,如开机启动。...本地广播:发出的广播只能在应用程序内部进行传递,广播接收器也只能接受来自本应用程序的广播。 全局广播:系统和广播,发出的广播可以被其他任何应用程序接收到,并且也可以接受到其他任何应用程序的广播。...在实现开机启动服务和网络状态改变、电量变化、短信和来电时通过接收系统的广播让应用程序作出相应的处理。
5.1.1.应用程序的组成部分 一般情况下,Android 应用程序由以下 4 种组件构成: 活动(Activity); 广播接收器(BroadcastReceiver); 服务(Service); 内容提供者...(2)广播接收器(BroadcastReceiver) 广播接收器用于让应用程序对一个外部事件做出响应。例如:电话呼入事件、数据网络可用通知或者到了晚上时进行通知。...(5)空(Empty)进程 不包含任何处于活动状态的应用程序组件。保留这种进程的唯一原因是,当下次应用程序的某个组件需要运行时,不需要重新创建进程,这样可以提高启动速度。...如果从应用程序的代码以及运行情况考虑,可以关注 Android 的各种组件相对应的生命周期。 1....活动被“覆盖”的情景:Android 的活动一般都占据一个完整的屏幕,从当前活动启动另外一个活动时,另一个活动将被启动到前台(Foreground),当前活动转入后台(Background),这时活动的
当某个应用组件启动且该应用没有运行其他任何组件时,Android 系统会使用单个执行线程为应用启动新的 Linux 进程。默认情况下,同一应用的所有组件在相同的进程和线程(称为“主”线程) 中运行。...举个常见的例子, BroadcastReceiver 在其 onReceive() 方法中接收到Intent时启动一个线程,然后从该函数返回。...此问题的解决方案通常是从 BroadcastReceiver 中安排一个 JobService ,以便系统知道在该进程中仍有活动的工作。...保留这种进程的的唯一目的是用作缓存(为了更加有效的使用内存而不是完全释放掉),以缩短下次启动应用程序所需的时间,因为启动一个新的进程也是需要代价的。只要有需要,Android会随时杀死这些进程。...另一个前台应用已关联到该应用(不管是通过绑定到其中一个 Service,还是通过使用其中一个内容提供程序)。
广播是一种广泛运用的在应用程序之间传输信息的机制 。...而 BroadcastReceiver 是对发送出来的广播进行过滤接收并响应的一类组件; 来自普通应用程序,如一个应用程序通知其他应用程序某些数据已经下载完毕。 ...BroadcastReceiver 自身并不实现图形用户界面,但是当它收到某个通知后, BroadcastReceiver 可以启动 Activity 作为响应,或者通过 NotificationMananger...提醒用户,或者启动 Service 等等。...生命周期 一个BroadcastReceiver 对象只有在被调用onReceive(Context, Intent)的才有效的,当从该函数返回后,该对象就无效的了,结束生命周期。
生命周期管理: Service 有一套生命周期方法(如 onStartCommand、onBind、onDestroy),帮助管理服务的启动、运行和销毁。...BroadcastReceiver 概述 BroadcastReceiver 是Android系统中的消息接收器,用于接收来自系统或其他应用程序的广播消息。...广播消息是一种全局的消息传递机制,用于通知应用程序发生了某些事件,比如设备电量低、网络连接改变等。 核心功能 接收广播: BroadcastReceiver 可以注册来接收系统或应用发出的广播消息。...它允许一个应用程序通过 ContentProvider 的接口访问另一个应用程序的数据,比如联系人、媒体文件等。ContentProvider 提供了标准的API来查询、插入、更新和删除数据。...和 ContentProvider)构成了应用程序的基础,每个组件都有其特定的用途和生命周期管理方式。
从架构图看,Android分为四个层,从高层到低层分别是应用程序层(Applications)、应用程序框架层(Application Framework )、系统运行库层(Libraries和Android...2)内容提供者(Content Providers),使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据。...反过来,由于ART需要在安装App时进行AOT处理,因此ART需要占用更多的存储空 间,应用安装和系统启动时间会延长不少。...03BroadcastReceiver 在Android 中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。...只要是注册了,当事件来临的时候,即使程序没有启动,系统也在需要的时候启动程序。
我们可以通过注册一个BroadcastReceiver来接收这个广播,从而实现在设备启动完成后执行特定的操作。2...."); // 在这里执行启动后的操作 } }}2.2 注册BroadcastReceiver有多种方式可以注册BroadcastReceiver,包括动态注册和静态注册...对于开机启动监听,通常推荐使用静态注册,因为它不需要应用程序在前台运行即可接收到广播。...下面是一个简单的示例,展示了如何创建一个BroadcastReceiver来监听设备启动完成的事件:创建BroadcastReceiver: 首先,你需要创建一个BroadcastReceiver类,这个类将负责处理接收到的广播消息...注意事项权限问题:从Android 8.0 (API level 26)开始,后台限制更加严格,即使应用注册了BOOT_COMPLETED广播,也可能因为系统优化而无法启动。
一.前言:BroadcastReceiver安全问题 对单个应用程序而言BroadcastReceiver是存在安全性问题的,为了解决这个问题LocalBroadcastManager就随之出现了。...与全局广播的区别: 全局广播,所有应用程序都可以接收到,就很容易会引起数据安全的问题,使用本地广播,只能在本地应用程序中发送与接收广播,可以起到保护数据安全的作用。...v.getId()) { case R.id.show: Intent intent = new Intent("com.changsha.yf.BroadcastReceiver...intentFilter = new IntentFilter(); intentFilter.addAction("com.changsha.yf.BroadcastReceiver...localBroadcastManager.unregisterReceiver(localReceiver); } private class LocalReceiver extends BroadcastReceiver
应用要接收系统发送的消息,就像打开一个收音机,然后收听这些广播,从广播获取系统的各种状态信息,比如接听到一个电话、收到一条短信、获取手机开机信息等等。...广播接收器BootCompleteReceiver从BroadcastReceiver类继承。重写BroadcastReceiver类的回调函数onReceive()。...应用程序的发送广播消息,其他应用程序也可以收到。广播的消息由Intent来传递。...Handler需要在主线程中启动子线程,然后通过handler来连接子线程和活动界面。对于单个异步任务,AsyncTask更简单,如果要处理多个异步任务就比较复杂。...Handler正好相反,从单个任务来看代码多,结构复杂,而在处理多个后台任务时,相比AsyncTask,实现更容易。AsyncTask比Handler更耗资源,适合简单的异步处理。