V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
w950888
V2EX  ›  Android

请教个问题,有做 android 开发的麻烦看下

  •  
  •   w950888 · 322 天前 · 3991 次点击
    这是一个创建于 322 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大家有遇到这个问题吗?

    Activity 中放了一个 webview, 在 webview 中, 通过 startActivityForResult 的方式调用系统相机拍照

    拍完照通过 onActivityResult 接收拍照回调, 这时可能出现 Activity 重建问题, webview 也被刷新了,如何避免 Activity 重建的问题呢?

    网上的方法:

    1. 因为 webview 内的内容比较复杂没法通过onSaveInstanceState保存状态.

    2. android:configChanges="orientation|keyboard|keyboardHidden|screenSize"测试这个没效果,还是会出现重建的情况.

    11 条回复    2023-05-13 20:25:13 +08:00
    AoEiuV020JP
        1
    AoEiuV020JP  
       322 天前
    只能想办法避免 activity 重建,实在避免不了的情况直接 finish 这个重建的 activity ,
    总之没法继续工作,
    w950888
        2
    w950888  
    OP
       322 天前
    @AoEiuV020JP 请问有什么办法避免 Activity 重建吗?
    试了很多方法,在低端平板上出现频率还是很高, 尤其是菊花家那种, 高分辨率摄像头+低端,CPU 内存搭配平板机型, 拍照的时候就很卡,拍完返回就重建了.
    Webview 的 Activity 设置成了单例模式, 因为 webview 里面的业务比较复杂也没法保存临时数据.
    直接 finish 这个重建的 activity,之前的数据还是丢了,
    主要是想保存网页状态.
    nanasaki
        3
    nanasaki  
       322 天前
    感觉还是存 bundle 吧,后面在从里面拿信息判断要不要刷新
    ZhizhenZhou
        4
    ZhizhenZhou  
       322 天前 via Android
    存缓存呢?
    tanranran
        5
    tanranran  
       322 天前   ❤️ 2
    1 、避免 Activity 重建这个事情误解
    2 、webview 中的东西当然要用 webview 来解决,把 webview 涉及到的状态信息定时存到 localStorage 中
    okakuyang
        6
    okakuyang  
       321 天前 via iPhone
    自己实现拍照 避免重建
    bluesky139
        7
    bluesky139  
       321 天前 via Android
    要完全避免只能自己实现拍照。
    guchengyehai1
        8
    guchengyehai1  
       321 天前 via iPhone
    Activity 与 WebView 都是独立的,WebView 可以独立加载网页
    lait
        9
    lait  
       321 天前 via Android   ❤️ 1
    低端平板,感觉是打开系统相机后内存不足,栈内的 activity 被回收了。可以监听下是否是低内存了。

    楼上有说自己实现拍照可能可行,总归是有可能比系统相机内存占用低一些。

    还有个路子,楼上也说了,想办法保存状态。原生的状态保存到 bundle ,webview 的保存到 webview 自身的缓存和数据存储里,比如 localstorage ,cookies 等。另外,也可以考虑使用 webview 的离线缓存。
    zpxshl
        10
    zpxshl  
       321 天前 via Android
    小米吗
    debuggeeker
        11
    debuggeeker  
       321 天前
    内存不够情况下系统会回收页面,回来的时候就重建了,说白了就是系统机制决定的。优化你的 APP ,减少内存占用,让系统有更多的内存给相机用。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2842 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 14:28 · PVG 22:28 · LAX 07:28 · JFK 10:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.