You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动