大家先看图,红色部分是一个 Fragment,右上角的放大镜用来点击弹出一个搜索的 Activity。这样有一个问题,弹出搜索 Activity 之后,红色框内的 Fragment 就被销毁视图了,这样每次返回就会重新创建视图,无意义地耗费用户流量,降低用户体验。
所以想请问,怎么样才能不让 Fragment 重新创建视图?
今天早上继续找原因,并看了一下包裹这个 Fragment 的 Activity 的生命周期,发现了一点猫腻。
正常情况下如第二张生命周期图,弹出新的 Activity 之后原 Activity 会执行 onStop 方法,返回后会执行 onRestart、onStart,只有进程被杀的情况下才会再次执行 onCreate 方法。
而现在我发现,点击搜索弹出 Activity 之后返回,原 Activity 竟然执行的是 onCreate,Fragment 又因为是在这里初始化的,所以才导致 Fragment 每次都会被重建。所以现在的问题是,为什么原 Activity 不走右边的生命周期而走了左边的生命周期。继续摸索中。。。
问题解决了,说下原因,是之前那人写的搜索 Activity 有问题,因为他让其销毁的时候是重新启动一个主页 Activity!而不是 finish!天哪,完全无法理解他这么做的意图。。。
怪我咯2017-04-17 15:27:11
fragment.hide() -> fragment.show()
이렇게 하면 다시 그려지지 않아요~(이런 경우는 잊어버렸네요) 다시 onCreateView(...)
를 호출해도 처음 그린 view
이 유지되고 다음 시간onCreateView(...)
이 호출되면 예약된 시간View
을 반납할 수 있습니다.
예:
으아악怪我咯2017-04-17 15:27:11
더 많은 코드 세부정보를 게시할 수 있나요?
정상적인 상황에서 새 Activity가 열리면 현재 Activity의 onStop 메서드가 호출되고, 연결된 Fragment의 onStop도 호출됩니다. 즉, 이전 Activity는 중지된 상태로 들어가야 합니다. 상태이므로 조각도 중지되어야 하며 삭제되어서는 안 됩니다.