Android简单应用运行崩溃:修改View可见性时闪退如何排查解决
问题排查结果
崩溃根本原因
成员变量初始化阶段执行findViewById时,Activity尚未调用setContentView加载布局,无法找到对应控件返回null,后续调用空对象的setVisibility方法触发空指针异常,导致应用崩溃。
修复方案
- 仅保留控件的成员变量声明,移除声明阶段的初始化逻辑
- 将
findViewById初始化逻辑移动到onCreate方法的setContentView调用之后执行 - 可在调用控件方法前增加非空判断,规避极端场景下的异常
修复后完整代码
public class MainActivity extends AppCompatActivity { // 仅声明成员变量 Button b1; TextView tvl; public void clickGo(View view) { // 非空判断避免异常 if (b1 != null) { b1.setVisibility(View.INVISIBLE); } if (tvl != null) { tvl.setVisibility(View.VISIBLE); } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 布局加载完成后再初始化控件 b1 = (Button) findViewById(R.id.button); tvl = (TextView) findViewById(R.id.textView2); } }
补充说明
Android Activity生命周期中,只有调用setContentView后才会将XML布局解析为对应的View实例挂载到Activity上,此时调用findViewById才能正确获取到控件对象。
内容的提问来源于stack exchange,提问作者Kumar Purshottam
相关产品推荐
相关产品推荐

