静态注册(8.0之后不可用)

当app静态注册了广播,在未启动的情况下,系统会拉起app。因此,如果多个app静态注册了系统的广播,那么就会拉起很多的app。 为了优化性能,在Android8.0(26)后静态注册的隐式广播无法接收。建议使用动态注册,或者发送广播时指定包名。

1.继承BroadcastReceiver


class DateChangeReceiver : BroadcastReceiver() {

    override fun onReceive(context: Context, intent: Intent) {
        // 处理日期变化逻辑
        if (Intent.ACTION_TIME_TICK == intent.action) {
            // 日期发生变化,执行相应的操作
            Log.d("时间改变事件", "onReceive: ${System.currentTimeMillis()}")
        }
    }
}

2.编写清单文件

        <receiver
            android:name=".Receiver.DateChangeReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.DATE_CHANGED" />
            </intent-filter>
        </receiver>

动态注册

1.参考动态注册步骤1

2.注册广播

class TestActivity : ComponentActivity() {
    private val dateChangeReceiver = DateChangeReceiver()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 注册广播
        this.registerReceiver(dateChangeReceiver, intentFilter);
    }
    @Override
    override fun onDestroy() {
        super.onDestroy()
        // 解绑广播
        this.unregisterReceiver(dateChangeReceiver)
    }
}