windowManager.getDefaultDisplay() 方法中的异常警告

Warning of Exception in windowManager.getDefaultDisplay() method

我正在使用下面的方法在我的 Activity:

onCreate() 方法中获取设备屏幕的实际宽度和高度(以像素为单位)
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
Display display = windowManager.getDefaultDisplay();
Point point = new Point();
display.getSize(point);

int absolute_screen_width_in_pixels = point.x;
int absolute_screen_height_in_pixels = point.y;

然而,我有这个警告强调 NullPointerException 的可能性:

我还没有发现这个 Exception,而且我想不出它会发生的情况。我应该怎么做才能确保永远不会抛出此 NullPointerException

此外,如果此方法失败,我应该编写什么备份代码来获取实际的物理屏幕尺寸?

这是因为 getSystemService(...) 在内部用 @Nullable 注释。

如果您传递了一个无效的系统服务名称(代替 WINDOW_SERVICE,它是 Context class 中的常量,我相信传递 "dummyName")它会 return空。

由于您正在使用注释为 "might be null" (windowManager) 的引用来获取一些 属性 (getDefaultDisplay()),因此出现 IDE 警告。

结论

只要您使用 Android 预定义的常量就应该是安全的。

与其尝试从上下文的 getSystemService 中获取 WindowManager(可能 return 为空),不如从 activity 中提取它。

WindowManager windowManager = activity.getWindowManager(); //This method always return not null.

DisplayMetrics displayMetrics = new DisplayMetrics();
windowManager.getDefaultDisplay().getMetrics(displayMetrics);
int screeWith = displayMetrics.widthPixels;
int screenHeight = displayMetrics.heightPixels;

希望对您有所帮助!