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

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

  •  
  •   w950888 · 2023-05-12 16:35:33 +08:00 · 8577 次点击
    这是一个创建于 553 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大家有遇到这个问题吗?

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

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

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