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;
希望对您有所帮助!
我正在使用下面的方法在我的 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;
希望对您有所帮助!