Context.getSystemService返回的服务永远不会为null?

时间:2016-05-26 18:50:09

标签: android

Context.getSystemService州的文档

  

返回:服务;如果名称不存在,则返回null。

可接受名称列表列为

 ACTIVITY_SERVICE
 ALARM_SERVICE
 AUDIO_SERVICE
 BATTERY_SERVICE
 CARRIER_CONFIG_SERVICE
 CONNECTIVITY_SERVICE
 DOWNLOAD_SERVICE
 INPUT_METHOD_SERVICE
 JOB_SCHEDULER_SERVICE
 KEYGUARD_SERVICE
 LAYOUT_INFLATER_SERVICE
 LOCATION_SERVICE
 MEDIA_ROUTER_SERVICE
 NETWORK_STATS_SERVICE
 NOTIFICATION_SERVICE
 POWER_SERVICE
 SEARCH_SERVICE
 SENSOR_SERVICE
 STORAGE_SERVICE
 TELEPHONY_SERVICE
 TELEPHONY_SUBSCRIPTION_SERVICE
 UI_MODE_SERVICE
 VIBRATOR_SERVICE
 WIFI_SERVICE
 WINDOW_SERVICE

假设我在活动或服务中getSystemService开始后的某个时刻将其中一个名称传递给onCreate,返回值是否会为空?

如果是,是否有任何可接受的名称始终返回非空值,或者我是否需要空检查所有getSystemService调用的返回值?

1 个答案:

答案 0 :(得分:2)

PackageManager.isInstantApp()返回true的即时应用程序无权访问以下系统服务:

DEVICE_POLICY_SERVICE, FINGERPRINT_SERVICE, SHORTCUT_SERVICE, USB_SERVICE, WALLPAPER_SERVICE, WIFI_P2P_SERVICE}, WIFI_SERVICE, WIFI_AWARE_SERVICE.

对于这些服务,此方法将返回null。 通常,如果您作为即时应用程序运行,则应始终检查此方法的结果是否为空。

并且由于getSystemService()方法被注释为@Nullable,根据经验,我将始终检查null :)。