Android11应用自启动限制
大纲
分析
按理说三方应用应该收不到开机启动广播(后文会证实这个说法是假的),但是很神奇的是还是有应用能自启动,体现为比如秋秋,启动后通过ps命令能看到其进程存活,但是静置后进程会启动失败,从而导致被清理
07-18 05:59:02.132367 938 967 I ActivityManager: Start proc 1930:com.tencent.mobileqq:MSF/u0a110 for broadcast {com.tencent.mobileqq/com.tencent.mobileqq.msf.core.NetConnInfoCenter}
log如上
参照这篇博客Android系统层面限制应用开机自启动详解,此时通过Android Studio查看其apk的manifest,其NetConnInfoCenter
内容如下
可以看到其监听了开机广播外,还监听了各种各样的广播,比如TIMEZONE_CHANGED
,看起来是时区变换的广播,这边尝试了一下在没有启动秋秋的情况下,去切换时区,果然打印了启动秋秋的log,虽然没有启动成功,但是之前在这个项目中,自己遇到过秋秋启动成功的情况,所以还是要处理
<receiver
android:name="com.tencent.mobileqq.msf.core.NetConnInfoCenter"
android:exported="false"
android:process=":MSF">
<intent-filter
android:priority="2147483647">
<action
android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
<intent-filter>
<action
android:name="android.intent.action.MY_PACKAGE_REPLACED" />
</intent-filter>
<intent-filter>
<action
android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
<intent-filter>
<action
android:name="android.intent.action.TIME_SET" />
</intent-filter>
<intent-filter>
<action
android:name="android.intent.action.TIMEZONE_CHANGED" />
</intent-filter>
<intent-filter>
<action
android:name="com.tencent.mobileqq.rdm.report" />
</intent-filter>
<intent-filter>
<action
android:name="com.tencent.mobileqq.msf.receiveofflinepush" />
</intent-filter>
<intent-filter>
<action
android:name="com.tencent.mobileqq.msf.offlinepushclearall" />
</intent-filter>
<intent-filter>
<action
android:name="com.tencent.mobileqq.msf.receiveofflinepushav" />
</intent-filter>
<intent-filter>
<action
android:name="com.tencent.mobileqq.msf.offlinepushclearallav" />
</intent-filter>
<intent-filter>
<action
android:name="com.tencent.mobileqq.msf.startmsf" />
</intent-filter>
<intent-filter>
<action
android:name="android.intent.action.MEDIA_BAD_REMOVAL" />
<action
android:name="android.intent.action.MEDIA_EJECT" />
<action
android:name="android.intent.action.MEDIA_MOUNTED" />
<action
android:name="android.intent.action.MEDIA_REMOVED" />
<action
android:name="android.intent.action.MEDIA_SCANNER_FINISHED" />
<action
android:name="android.intent.action.MEDIA_SCANNER_STARTED" />
<action
android:name="android.intent.action.MEDIA_SHARED" />
<action
android:name="android.intent.action.MEDIA_UNMOUNTED" />
<data
android:scheme="file" />
</intent-filter>
<intent-filter>
<action