修复MainActivity停止时CameraX NPE崩溃

1. 升级CameraX版本 1.3.0 → 1.4.1,从根本修复RequestWithCallback.abort() NPE
2. 跳转PayActivity前调用shutdownCamera(),防止in-flight拍照请求触发生命周期异常
3. onResume()顶部增加相机恢复逻辑,通过cameraProviderFuture==null判断是否需要重新初始化
4. shutdownCamera()中将cameraProviderFuture置null,作为相机已停止的可靠标志

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-10 19:05:28 +08:00
co-authored by Claude Sonnet 4.6
parent 8a1630f2a4
commit 7232735073
2 changed files with 7 additions and 2 deletions
@@ -457,6 +457,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
// 3. 关闭相关资源
imageCapture = null
imageAnalysis = null
cameraProviderFuture = null
// 4. 停止副屏更新
isAnalyzing = false
@@ -555,6 +556,10 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
override fun onResume() {
super.onResume()
isPageVisible = true
// shutdownCamera 后 cameraProviderFuture 置为 null,需重新初始化相机
if (cameraProviderFuture == null) {
setupCamera()
}
// 启动定时器
handler.postDelayed(timeoutRunnable, TIME_OUT)
// ToastUtils.showToast("isPageVisible=$isPageVisible")
@@ -797,7 +802,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
userId = null,
) {
isRefreshPage = false
//presentation?.dismiss()
shutdownCamera()
startActivity(Intent(this, PayActivity::class.java).apply {
putExtra(PayActivity.FOOD_INFO, checkedItem!!)
putExtra(PayActivity.FOOD_EAT_NUM, eatNum)
+1 -1
View File
@@ -13,7 +13,7 @@ material = "1.10.0"
activity = "1.8.0"
constraintlayout = "2.1.4"
accompanistPermissions = "0.37.3"
cameraCore = "1.3.0"
cameraCore = "1.4.1"
retrofit = "3.0.0"
okhttp = "4.12.0"
timber = "5.0.1"