假设我们在通过findViewById()
提取的变量上调用方法:
TextView tv = (TextView) findViewById(R.id.text);
tv.setText("Some text");
如果NullPointerException
原来是tv
,Android Studio会自动警告我们setText()可能会生成null
。但是,如果我们确定tv
将永远不会null
(除非发生真正令人不安的事情,这应该会导致应用程序崩溃),是否真的值得在if(tv != null){}
语句中封装方法调用?如果这两个(或更多)行经常执行怎么办?我们能否获得任何显着的业绩增长?
答案 0 :(得分:1)
我个人认为检查这些是null
有多大意义,因为您会知道它们是否存在于您的布局文件中,所以我不会打扰。
但是,我有时会使用以下内容来阻止Android Studio中的警告:
assert tv != null;
我不知道这会如何影响表现,但我想它几乎没有差别。
答案 1 :(得分:0)
抛出或创建新异常肯定会消耗比您预期更多的资源但在必要时处理异常总是好的,而不是让应用程序崩溃。 IF 您绝对肯定textview或任何UI元素 IS 出现在您的活动和/或片段的正确XML中,那么我不认为您应该使用try catches ..
答案 2 :(得分:0)
是的,您可以使用断言来避免如上所述的Android Studio警告,并且就性能而言,我认为您不会注意到任何巨大的性能变化。但是,它总是很好地捕获异常并记录它们,因为它在调试时非常有用。
答案 3 :(得分:0)
实际上,它可以是null
。
如果你有复杂的布局和许多id,如果你输入其他布局的id就会发生这种情况。
这只是一个警告。如果您的布局很容易记住所有ID,或者您确定它永远不会null
,请不要打扰此警告。
当您手动更改布局中的ID时,此警告很有用。
EX:
布局1包含ID: text_view_1 ,button_1
布局2包含ID: text_view_1 ,button_2
活动2使用布局2和findViewById( text_view_1 )
如果您从 text_view_1 更改为 text_view_2 (通过键入手动)。没有发生错误,因为id text_view_1仍然退出。但运行应用程序时会出现NullPointerException
。