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

2023-05-12 16:35:33 +08:00
 w950888

大家有遇到这个问题吗?

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

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

网上的方法:

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

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

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

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

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

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

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

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

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

© 2021 V2EX