大家有遇到这个问题吗?
Activity 中放了一个 webview, 在 webview 中, 通过 startActivityForResult 的方式调用系统相机拍照
拍完照通过 onActivityResult 接收拍照回调, 这时可能出现 Activity 重建问题, webview 也被刷新了,如何避免 Activity 重建的问题呢?
网上的方法:
因为 webview 内的内容比较复杂没法通过onSaveInstanceState
保存状态.
android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
测试这个没效果,还是会出现重建的情况.
1
AoEiuV020JP 2023-05-12 17:12:43 +08:00
只能想办法避免 activity 重建,实在避免不了的情况直接 finish 这个重建的 activity ,
总之没法继续工作, |
2
w950888 OP @AoEiuV020JP 请问有什么办法避免 Activity 重建吗?
试了很多方法,在低端平板上出现频率还是很高, 尤其是菊花家那种, 高分辨率摄像头+低端,CPU 内存搭配平板机型, 拍照的时候就很卡,拍完返回就重建了. Webview 的 Activity 设置成了单例模式, 因为 webview 里面的业务比较复杂也没法保存临时数据. 直接 finish 这个重建的 activity,之前的数据还是丢了, 主要是想保存网页状态. |
3
nanasaki 2023-05-12 18:23:52 +08:00
感觉还是存 bundle 吧,后面在从里面拿信息判断要不要刷新
|
4
ZhizhenZhou 2023-05-12 20:05:53 +08:00 via Android
存缓存呢?
|
5
tanranran 2023-05-12 20:08:42 +08:00 2
1 、避免 Activity 重建这个事情误解
2 、webview 中的东西当然要用 webview 来解决,把 webview 涉及到的状态信息定时存到 localStorage 中 |
6
okakuyang 2023-05-12 22:45:37 +08:00 via iPhone
自己实现拍照 避免重建
|
7
bluesky139 2023-05-13 02:20:13 +08:00 via Android
要完全避免只能自己实现拍照。
|
8
guchengyehai1 2023-05-13 07:06:39 +08:00 via iPhone
Activity 与 WebView 都是独立的,WebView 可以独立加载网页
|
9
lait 2023-05-13 10:19:19 +08:00 via Android 1
低端平板,感觉是打开系统相机后内存不足,栈内的 activity 被回收了。可以监听下是否是低内存了。
楼上有说自己实现拍照可能可行,总归是有可能比系统相机内存占用低一些。 还有个路子,楼上也说了,想办法保存状态。原生的状态保存到 bundle ,webview 的保存到 webview 自身的缓存和数据存储里,比如 localstorage ,cookies 等。另外,也可以考虑使用 webview 的离线缓存。 |
10
zpxshl 2023-05-13 14:44:46 +08:00 via Android
小米吗
|
11
debuggeeker 2023-05-13 20:25:13 +08:00
内存不够情况下系统会回收页面,回来的时候就重建了,说白了就是系统机制决定的。优化你的 APP ,减少内存占用,让系统有更多的内存给相机用。
|