編輯:關於Android編程
1解決bug的思想:
//step1:當bug被發現(排除極低偶然性,單次性,開發工具導致)
//step2:根據經驗判斷bug的重現場景,多次測試,直到精准的定位bug
//step3:根據重現場景找到對應的代碼
//step4:分析區域代碼是否會影響到其他功能.
//step5:做好數據的備份工作.(做好代碼重構和恢復的准備,這樣你才能肆無忌憚的搗鼓代碼)
//step6:修復代碼的過程中,你會發現可能有多種解決方案.試著采取不影響主線的解決方案.以免影響到其他的代碼.
//step7:回顧所有的審查和測試等工作。思考bug的出現原因,避免下次再犯同類型的錯誤.
2導致原因
//step1:開發中,我們需要經常需要多個Fragment間切換,並且保存每個Fragment的狀態.
//step2:官方的方法是使用replace()來替換Fragment,但是replace()的調用會導致Fragment的onCreteView()被調用,所以切換界面時會無法保存當前的狀態.
//step3:因此一般采用add()、hide()與show()配合,來達到保存Fragment的狀態.
3原理解析
//step1:正是因為使用了Fragment的狀態保存,當系統內存不足,Fragment的宿主Activity回收的時候,Fragment的實例並沒有隨之被回收。
//step2:Activity被系統回收時,會主動調用onSaveInstance()方法來保存視圖層(View Hierarchy),然後通過onRestoreInstanceState()方法來恢復視圖層.(activity中兩個方法的核心代碼如下) //step3:所以當Activity通過導航再次被重建時,之前被實例化過的Fragment依然會出現在Activity中 protected void onRestoreInstanceState(Bundle savedInstanceState) { if (mWindow != null) { //取出視圖層 Bundle windowState = savedInstanceState.getBundle(WINDOW_HIERARCHY_TAG); if (windowState != null) { mWindow.restoreHierarchyState(windowState); } } } protected void onSaveInstanceState(Bundle outState) { //保存視圖層 outState.putBundle(WINDOW_HIERARCHY_TAG, mWindow.saveHierarchyState()); Parcelable p = mFragments.saveAllState(); if (p != null) { outState.putParcelable(FRAGMENTS_TAG, p); } getApplication().dispatchActivitySaveInstanceState(this, outState); }
4解決方法(了解清楚後解決方法就容易了)
//solution1:
第一.簡單的做法,就是給每層fragment加上背景色,重疊後也就看不見了
//solution2:
第二.進行判空操作.
如果為空,創建對象,add上去;
如果不為空,直接show出來;
(注意不要使用remove方法移除,hide即可)
以上所述是小編給大家介紹的Android Fragment多層嵌套重影問題的解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對本站網站的支持!
Java是垃圾回收語言的一種,其優點是開發者無需特意管理內存分配,降低了應用由於局部故障(segmentation fault)導致崩潰,同時防止未釋放的內存把堆棧(he
之前重要負責收集聯系人添加歸屬地,公司這兩個智能分組;網上的實現方法很多,有說通過webserver來查詢,但是網絡這種形式不是長遠之道;畢竟服務器不是你自己的,還有
當內容超過了TextView的顯示范圍,這個時候就需要TextView裡面的內容滾動起來。 首先看下布局文件: 即便布局文件這樣設置了相關屬性,但是在
我們總是出門後才發現忘了關電腦,或是忘了從電腦中拷貝重要數據,難道還得跑回家一趟?嘿嘿,想在外網環境下遠程控制PC,其實沒有那麼復雜。如果某位童鞋擔心遇到上