Android端Firebase图片上传时应用崩溃问题的排查与解决
解决Android Firebase图片上传时的无日志崩溃问题
问题场景
之前我的Android应用里Firebase图片上传功能一直正常,做完其他功能修改后突然出问题了:
- 点击图片选择弹窗的OK/Cancel按钮,应用直接崩溃
- 从图库选图片的时候,应用也会崩溃
- 看Logcat只有一条没什么关联的日志:
2021-03-30 22:56:16.853 12576-12576/? E/in.firebasetes: Unknown bits set in runtime_flags: 0x8000
下面是我相关的核心代码(包含权限校验、弹窗选择、相机/图库调用、Firebase上传逻辑):
user = FirebaseAuth.getInstance().getCurrentUser(); reference = FirebaseDatabase.getInstance().getReference("Users"); userID = user.getUid(); storageReference = FirebaseStorage.getInstance().getReference(); UserPic = (ImageView) findViewById(R.id.UserPic); UserPic.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { VerifyPermission(); } if (user != null){ if (user.getPhotoUrl() != null) { Glide.with(this).load(user.getPhotoUrl()).into(UserPic); } } }); private void VerifyPermission() { if (ContextCompat.checkSelfPermission(UserProfile.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED){ ActivityCompat.requestPermissions(UserProfile.this, new String[] {Manifest.permission.CAMERA}, CAMERA_PERMISSION_CODE); }else { Toast.makeText(this, "OK", Toast.LENGTH_SHORT).show(); selectOptionList(); } } // 省略onRequestPermissionsResult、selectOptionList、相机/图库Intent调用、Firebase上传等方法代码
排查与解决过程
一开始我盯着权限配置、Firebase存储规则、Intent跳转逻辑查了半天,都没发现问题——权限申请正常,FileProvider配置也对,Firebase存储的读写规则也没问题,但崩溃就是毫无征兆地发生,还没有用的报错日志。
后来突然想到:打开相机或者图库的时候,当前的UserProfileActivity会进入onStop生命周期状态,我之前加了一个onStop函数,里面的逻辑有问题,会导致应用在这个阶段直接关闭。
把这个onStop函数移除之后,所有崩溃问题都消失了!
原因总结
系统把打开相机、选择图库图片的操作视为启动新Activity,此时当前Activity会执行onStop方法。如果你的onStop函数里有错误的资源释放、应用退出逻辑,就会触发无明确日志的崩溃,那个runtime_flags的日志只是干扰项,和实际问题无关。
内容的提问来源于stack exchange,提问作者Victor Lum




