什么是残疾人广播接收器的意义?

时间:2015-10-17 14:08:34

标签: android broadcastreceiver android-broadcast android-broadcastreceiver

我遇到了这段代码:

<receiver android:name=".SampleBootReceiver"
        android:enabled="false">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"></action>
    </intent-filter>
</receiver>

在阅读有关AlarmManager ZipArchive class时,我不明白为什么他们会将他们的接收者声明为enabled = false?为什么他们不希望系统能够实现他们的接收器,并且一般来说什么是声明XML无法通过系统实例化的接收器?

1 个答案:

答案 0 :(得分:2)

  

我不知道为什么他们会将他们的接收者声明为enabled = false?

因为并不总是需要接收器。

  

为什么他们不希望系统能够实现他们的接收器

因为并不总是需要接收器。

  

什么是声明XML无法通过系统实例化的接收器?

因为接收器可以在以后需要 时启用。

例如,假设您正在实现类似下载应用程序的内容,这是为DownloadManager提供实现的内容。下载文件时,设备可能会重新启动。理想情况下,您希望在重新启动完成后恢复下载。但是,大多数情况下,文件没有被下载,因此通常不需要在启动时获得控制权。

懒惰的方法是说你将始终在启动时获得控制权,看看在重启时是否有未完成的下载,如果有,则重启下载,然后去如果没有的话。这很浪费,因为它迫使Android为您分配流程并完成一系列流程设置工作,最后,您不会为用户做任何事情。

更好的方法是正常禁用启动完成的接收器。当下载文件的请求进入时,使用setComponentEnabledSetting()上的PackageManager启用接收器,然后在下载完成后再次禁用它。现在,只有在正在进行下载的重新启动时,您才能在启动时获得控制权,并在其余时间加快启动过程。

更一般地说,如果你想从清单注册的接收器监听广播(特别是系统的),但只有部分时间,你可以使用Java代码启用和禁用接收器setComponentEnabledSetting()。通常,您从接收器被禁用开始,但这不是一个严格的要求。