`
OliveExcel
  • 浏览: 71524 次
文章分类
社区版块
存档分类
最新评论

Android系统中STOPPED应用无法接收广播的研究

阅读更多

之前写过一篇文章: 

Android 3.1后, 新安装的以及用户强行停止的apk, 无法监听广播的问题

 

今天终于研究了一下原理, 把代码执行逻辑贴上来:

ContextImpl.sendBroadcast()
    ActivityManagerNative.getDefault().broadcastIntent()
        ActivityManagerService.broadcastIntent()
            ActivityManagerService.broadcastIntentLocked()
                ActivityManagerService.collectReceiverComponents()
                    PackageManagerService.queryIntentReceivers()
                        PackageManagerService.ActivityIntentResolver.queryIntentForPackage()
                            IntentResolver.queryIntentFromList()
                                IntentResolver.buildResolveList()
                                    PackageManagerService.ActivityIntentResolver.isFilterStopped()
                                        return (ps.pkgFlags&ApplicationInfo.FLAG_SYSTEM) == 0 && ps.getStopped(userId);

 

结论: 

只有非STOPPED状态的应用, 以及系统应用, 可以接收到Intent中不包含FLAG_INCLUDE_STOPPED_PACKAGES的广播.

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    android广播机制(二)

    在Android中,BroadcastReceiver是用于接收和响应系统或应用程序发送的广播消息的组件。广播可以是系统级别的(例如,电池电量低的通知),也可以是应用程序自定义的(比如,数据同步完成)。当一个广播被发送时,...

    地图广播接口--AmapAuto标准广播协议

    1. **应用无法唤醒问题**:在Android 3.0及以上系统,针对初次安装或被强制停止后的地图应用,调用广播协议无法唤醒地图。解决方法是添加`Intent.FLAG_INCLUDE_STOPPED_PACKAGES`标志,或直接启动应用。 ### 五、...

    android打开另一App,并监测运行情况

    在Android平台上,开发人员可以实现一个功能,即从自己的应用程序中启动另一个应用,并且能够监控目标应用的运行状态。这通常涉及到Intent的使用,Activity管理,以及系统广播接收器。以下将详细介绍这些知识点: 1...

    Android应用开发详解d88 android入门

    Android应用基于Java或Kotlin语言编写,其核心架构包括四大组件:活动(Activity)、服务(Service)、广播接收器(BroadcastReceiver)和内容提供者(ContentProvider)。活动是用户与应用交互的界面,服务则在后台...

    自定义权限广播

    总的来说,自定义权限广播是Android中实现细粒度安全控制的重要手段,通过这种方式,你可以确保只有特定的应用或满足特定条件的应用才能接收和处理特定的广播消息。这对于保护敏感数据和执行关键操作尤其重要。在...

    Android应用实现安装后自启动的方法

    在Android系统中,我们可以使用广播机制来实现应用程序的安装后自启动。 在Android系统中,我们可以使用ACTION_PACKAGE_ADDED、ACTION_PACKAGE_REPLACED、ACTION_PACKAGE_CHANGED、ACTION_PACKAGE_REMOVED、ACTION_...

    Android应用源码之强行结束APP进程的方法-IT计算机-毕业设计.zip

    在Android应用开发中,了解如何强制结束APP进程是一项重要的技能,尤其是在进行系统优化或调试时。这个"Android应用源码之强行结束APP进程的方法"压缩包文件提供了相关的源码示例,非常适合毕业设计学习和论文研究。...

    A0102Android应用主要组件1

    3. **广播接收器(BroadcastReceiver)**:BroadcastReceiver是接收和响应系统或应用广播事件的组件。系统会发送各种广播通知,如时间区域变化、电池电量低、语言设置更改等。应用也可以自定义广播,比如通知其他应用...

    Android 锁屏页面避免被杀掉,解锁会自动关闭页面。防止后台运行时被关闭。

    在Android开发中,保持应用程序在锁屏状态下不被系统优化机制清理,并且在用户解锁后能够自动关闭特定页面,是一项常见的需求。这涉及到Android系统的进程管理、权限控制以及活动生命周期管理等多个方面。以下是对这...

    android

    在 Android 应用的生命周期中,活动有多种状态,包括运行(Running)、暂停(Paused)、停止(Stopped)和销毁(Destroyed)。开发者需要理解这些状态,以便在适当的时候保存和恢复应用的状态。 Android 的权限管理...

    安卓程序登录后一段时间不进行操作,自动退出程序

    在安卓应用开发中,为了优化用户体验和节省系统资源,有时我们需要在用户长时间未操作应用时自动退出程序。这个功能可以通过监听用户的活动状态和设定超时机制来实现。下面将详细介绍如何在Android平台上实现这一...

    Android精简面试总结

    - **发送特定广播**:定义一个特定的广播,当接收到此广播时,各个Activity响应并执行`finish()`方法。 综上所述,了解Activity的不同启动模式和生命周期状态对于开发高质量的Android应用至关重要。同时,掌握如何...

    Android开发的四大组件

    在Android应用开发中,四大组件是构建应用程序的基础,它们分别是Activity、Service、BroadcastReceiver和ContentProvider,还有Intent作为组件间通信的重要桥梁。下面我们将逐一详细解释这些组件。 **Activity详解...

    android Part two

    广播接收器让你的应用程序能响应系统和其他应用发出的广播事件,而内容提供者则负责数据的共享和管理。 其次,Android的生命周期管理至关重要。理解每个组件在不同状态下的行为,如暂停(Paused)、停止(Stopped)...

    android sdk 17

    例如,开发者可以使用`ACTION_DREAMING_STARTED`和`ACTION_DREAMING_STOPPED`广播接收器来检测设备是否处于Daydream状态。 9. **AppOps API**:虽然这个功能在后来的版本中被弃用,但Android 4.2引入了AppOps API,...

    Android开发指南中文版

    - `BroadcastReceiver`:接收并响应系统或应用广播事件。 - `ContentProvider`:管理应用程序间的数据共享,允许不同应用访问和修改数据。 **应用程序组件** Android应用由多个组件组成,每个组件都可以独立启动或...

    Android组件的生命周期

    Android系统架构由多个层次组成,其中包括硬件抽象层(HAL)、运行时库、应用程序框架以及应用程序层。本文重点讨论的是应用程序层中的四大组件及其生命周期。 ##### 组件功能简介 1. **Activity** - **定义**:...

    android高级面试题

    BroadCastReceiver是Android中的一个组件,用于接收系统或应用发出的广播。其生命周期较短,只在OnReceive方法执行期间处于活跃状态。在OnReceive执行完毕后,BroadCastReceiver将变为非活跃状态。 ...

    完全退出程序的方法.zip

    - 用户可以通过手机设置中的应用管理器手动结束应用,但这并不推荐,因为Android系统会根据需要自动管理应用的内存使用。 4. **编程实现**: - 在代码中,可以调用`finish()`方法来结束当前Activity,但这同样...

Global site tag (gtag.js) - Google Analytics