You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在按下返回按钮时保存ImageView中上传图片的Uri?

解决Activity销毁后ImageView图片Uri丢失的问题

嘿,这个场景太常见了——当Activity按下返回键销毁后重建,或者遇到屏幕旋转这类配置变更时,之前上传到ImageView的图片Uri很容易丢失,导致图片显示空白。你的代码思路完全正确,就是用Android自带的状态保存机制来解决,我来给你拆解下这个方案,再补充几个关键注意点:

核心实现步骤

Android提供了OnSaveInstanceState和OnRestoreInstanceState(还有OnCreate里的savedInstanceState参数)来帮我们保存临时状态,你的代码已经覆盖了核心流程:

1. 销毁前保存Uri

在Activity即将被系统销毁前,重写OnSaveInstanceState方法,把有效的Uri存入Bundle。因为Uri实现了Parcelable接口,所以直接用PutParcelable就能存:

protected override void OnSaveInstanceState(Bundle outState) { 
    base.OnSaveInstanceState(outState); 
    if (uri != null) { 
        outState.PutParcelable("uri", uri); 
    } 
} 

2. 重建时恢复Uri并显示图片

有两个时机可以恢复状态,选一个或者结合用都可以:

  • 在OnCreate中恢复:Activity重建时,OnCreate会收到保存的savedInstanceState,不为空的话就取出Uri,重新设置给ImageView:
    protected override void OnCreate(Bundle savedInstanceState) { 
        base.OnCreate(savedInstanceState); 
        SetContentView(Resource.Layout.User_Account); 
        button.Click += ButtonOnClick; 
        if (savedInstanceState != null) { 
            uri = (Android.Net.Uri)savedInstanceState.GetParcelable("uri"); 
            _imageView.SetImageURI(uri); 
        } 
    }
    
  • 在OnRestoreInstanceState中恢复:这个方法专门用于状态恢复,会在OnStart之后调用,逻辑和上面一致:
    protected override void OnRestoreInstanceState(Bundle savedInstanceState) { 
        base.OnRestoreInstanceState(savedInstanceState); 
        uri = (Android.Net.Uri)savedInstanceState.GetParcelable("uri"); 
        _imageView.SetImageURI(uri); 
    } 
    

实用提醒

  • Uri权限问题:如果你的Uri是从系统媒体库获取的临时权限,有些情况下Activity重建后权限可能失效,导致Uri无法访问。这时候可以考虑把图片复制到App的私有目录,然后保存私有目录的文件路径,这样稳定性更高。
  • 空值判断不能少:你代码里的if (uri != null)很关键,能避免空指针异常,一定要保留。
  • 避免重复操作:如果同时在OnCreate和OnRestoreInstanceState里做恢复,不用担心重复执行——OnRestoreInstanceState只有在有状态需要恢复时才会被调用,系统已经帮我们处理好了。

这个方案是Android官方推荐的临时状态保存方式,完全能解决你遇到的返回键导致Uri丢失的问题。

内容的提问来源于stack exchange,提问作者Rana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:21:01