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

351 天前
 w950888

大家有遇到这个问题吗?

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

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

网上的方法:

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

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

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

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

还有个路子,楼上也说了,想办法保存状态。原生的状态保存到 bundle ,webview 的保存到 webview 自身的缓存和数据存储里,比如 localstorage ,cookies 等。另外,也可以考虑使用 webview 的离线缓存。
zpxshl
350 天前
小米吗
debuggeeker
350 天前
内存不够情况下系统会回收页面,回来的时候就重建了,说白了就是系统机制决定的。优化你的 APP ,减少内存占用,让系统有更多的内存给相机用。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/939554

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX