使用View Binding开发的Android应用在AVD运行时出现白屏如何解决
问题排查及解决方案
核心问题点
- 混淆View Binding与Data Binding用法:你声明使用View Binding,但代码中调用的
DataBindingUtil是Data Binding组件的专属类,若未在模块级build.gradle中开启Data Binding配置,会导致binding初始化失败、布局加载异常。 - for循环逻辑错误触发死循环:代码中
for (int i = 0; i < questionBank.length;)未添加i++自增逻辑,循环永远无法退出,主线程持续被阻塞无法执行UI绘制流程,是白屏的直接诱因。 - 冗余调用setContentView:
DataBindingUtil.setContentView已经完成了布局加载与绑定操作,后续再执行setContentView(binding.getRoot())属于无效重复操作,属于不规范写法。 - 循环内重复覆盖控件配置:即便修复死循环问题,循环执行过程中会重复给textView赋值、覆盖按钮点击事件,最终仅最后一条题目的配置会生效,不符合答题应用的交互预期。
修复方案
- 优先确认你使用的视图绑定类型:
- 若使用View Binding,需将binding初始化逻辑替换为View Binding的标准写法,无需使用DataBindingUtil
- 若使用Data Binding,需先确认模块级
build.gradle中已添加开启配置:android { buildFeatures { dataBinding true } }
- 修复死循环逻辑:如果需求是默认展示第一道题,无需用循环遍历所有题目,直接取下标为0的题目即可;如果需要支持切换题目,可单独编写切换方法,不要在onCreate中遍历所有题目。
修复后代码示例
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 若使用Data Binding保留该行,若使用View Binding替换为下方注释的写法 binding = DataBindingUtil.setContentView(MainActivity.this,R.layout.activity_main); // View Binding写法示例: // binding = ActivityMainBinding.inflate(getLayoutInflater()); // setContentView(binding.getRoot()); binding.textView.setTextSize(18); // 直接取第一道题展示,不需要循环 if(questionBank.length > 0) { Questions currentQuestion = questionBank[0]; binding.textView.setText(currentQuestion.getAnswerResId()); binding.button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (currentQuestion.isAnswerTrue()) { Toast.makeText(MainActivity.this, R.string.correct_answer, Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, R.string.wrong_answer, Toast.LENGTH_SHORT).show(); } } }); binding.button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (!currentQuestion.isAnswerTrue()) { Toast.makeText(MainActivity.this, R.string.correct_answer, Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, R.string.wrong_answer, Toast.LENGTH_SHORT).show(); } } }); } }
内容的提问来源于stack exchange,提问作者Abhinav
相关产品推荐
相关产品推荐

