Есть боковая шторка с меню. При нажатии на меню фрагмент с контентом меняется на другой. Ссылки на фрагменты не где не храню, при смене каждый раз создаю новый. При первых пару переключений все происходит как и задумано. Старый фрагмент удаляется сборщиком, а новый встает вместо него. То есть с памятью происходит что типо того, занято 28мб затем заменяю фрагмент, падает до 19 затем возрастает до тех же 28. Но после того как немного попереключаться по пунктам меню память перестает освобождаться и переключаясь между двумя пунктами оператива взлетает до 100мб а то и больше.
Код смены фрагментов и самого фрагмента ниже
private fun showEventBoard() {
setTitle(R.string.event_board)
supportFragmentManager.beginTransaction()
.replace(R.id.main_content, MainEventBoardFragment(), EVENT_BOARD_FRAGMENT_TAG)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commit()
}
private fun showFavoriteEventBoard() {
setTitle(R.string.favorites)
supportFragmentManager.beginTransaction()
.replace(R.id.main_content, FavoriteEventBoardFragment(), FAVORITE_EVENT_BOARD_FRAGMENT_TAG)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commit()
}
abstract class EventBoardFragment : Fragment(), SubscriberChangesFavorite<EventInfo> {
protected var createFilter = false
protected var eventBoardView: EventBoardView? = null
protected var filterBlock: FilterEventBoard? = null
protected var adapter: AdapterEventBoard? = null
protected var loaderEvents: LoaderEvents? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (eventBoardView != null)
return
adapter = AdapterEventBoard(ControllerBehaviorEventViewHolder(this))
loaderEvents?.loadAllEvents { events ->
if (events != null)
for (e in events)
adapter?.addItem(e)
}
}
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
if (eventBoardView != null)
return eventBoardView?.rootView
val root = inflater?.inflate(R.layout.event_board, container, false)
eventBoardView = EventBoardView(root!!)
eventBoardView?.setRecyclerViewAdapter(adapter!!)
if (createFilter) {
filterBlock = createFilter()
val v = filterBlock?.getView()
if (v != null)
eventBoardView?.addDynamicElement(v)
}
setHasOptionsMenu(true)
return root
}
override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
if (createFilter)
inflater?.inflate(R.menu.menu_main_activity, menu)
super.onCreateOptionsMenu(menu, inflater)
}
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
if (item?.itemId == R.id.filter) {
if ((filterBlock?.showFilter ?: false))
filterBlock?.hideFilterDialog()
else
filterBlock?.showFilterDialog(DataManager.getInstance().userData.filterInfo)
}
return super.onOptionsItemSelected(item)
}
protected abstract fun createFilter(): FilterEventBoard
}