下面是我的清单文件。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.mccheekati.test_trail">
<uses-permission
android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<receiver
android:name="com.example.mccheekati.test_trail.yourActivityRunOnStartup"
android:enabled="true"
android:exported="true"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON"
/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
广播接收器如下所示:
public class yourActivityRunOnStartup extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
Intent i = new Intent(context, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
}
没有错误。重新启动手机时应用程序正在打开。但是重新启动后启动应用程序需要一分钟的时间。重新启动后是否有立即启动应用程序的内容?
重新启动后有什么可以立即启动应用程序的吗?
不。
有很多很多应用程序希望在启动时获得控制权。轮到您的速度取决于许多变量,例如已安装的应用程序数量、设备的 CPU 速度、设备上的系统 RAM 数量等。
此外,在启动时从BroadcastReceiver
启动活动是相当邪恶的。如果你想成为用户在重新启动后看到的第一件事,请编写主屏幕实现。
会有一些系统资源需要先启动,并且优先级高于接收器。但是,您可以尝试在清单中为您的意图设置优先级。这样:
<intent-filter android:priority="999">
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
请查看开发人员文档中有关此内容的详细信息: 文档
关于优先级的摘录:
它控制广播接收器的执行顺序 接收广播消息。具有较高优先级值的那些是 在具有较低值的人之前调用。(该命令仅适用于 同步消息;对于异步消息,将忽略它。
用 仅当您确实需要在 接收广播,或想要强制Android更喜欢 一项活动优于其他活动。
该值必须是整数,例如 "100".数字越大,优先级越高。默认值为 0。 该值必须大于 -1000 且小于 1000。
就我而言,在 Android 11 设备上
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
没有<category>
标签,开机后接收android.intent.action.BOOT_COMPLETED
大约需要1分钟,而有<category>
标签,只需要4秒
我知道这个问题的例子已经有这一行了,只是为了分享我的情况。