Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- list
- LiveData
- Generic
- 생명주기
- class component
- collection
- map
- animation
- enum
- recyclerview
- ReactNative
- lifecycle
- union
- Filter
- docker
- elementAt
- vuex
- react native
- MINUS
- Service
- Interface
- Foreign Key
- CLASS
- docker-compose
- Swift
- function
- mongoose
- ConstraintLayout
- AWS
- Kotlin
Archives
- Today
- Total
개발 일기
Fragment recyclerView 관련 메모리 이슈 본문
아래에 같은 그림에서는 다음과 같이 메모리 이슈가 있습니다.
class HomeFragment : Fragment() {
private val adapter = Adapter()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? =
inflater.inflate(R.layout.fragment_home, container, false)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val recyclerView: RecyclerView = view.findViewById(R.id.recycler_view)
recyclerView.layoutManager = LinearLayoutManager(this.context)
recyclerView.adapter = adapter
}
}
class ViewHolder(view: View) : RecyclerView.ViewHolder(view)
class Adapter : RecyclerView.Adapter<ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder =
ViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.view_item, parent, false))
override fun getItemCount(): Int = 10
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
// Bind your data at this position to the view holder
}
}
fragment LifeCycle
onAttach() -> onCreateView() -> onDestroyView() -> onDetach()
View LifeCycle
onCreateView() -> onDestroyView()
위에 같이 onStop()에서 서로를 참조할려고 할때 일반적으로 누수가 발견됩니다.
따라서 위에서는 Fragment -> Adapter -> RecyclerView 이렇게 서로 참고를 하고 있기에 메모리 누수가 있습니다.
그래서 다음과 같이 cycle을 끊을수 있습니다.
fun onDestroyView() {
adapter = null // adapter is nullable
super.onDestroyView()
}
or
fun onDestroyView() {
view?.findViewById<RecyclerView>(R.id.recycler_view)?.adapter = null
super.onDestroyView()
}
여기에서 참고했습니다.
'Client > 안드로이드' 카테고리의 다른 글
다중 창 지원 (0) | 2020.04.03 |
---|---|
coroutine ktx (0) | 2020.03.30 |
ViewModel (0) | 2020.03.27 |
Rxjava Subject (0) | 2020.03.26 |
Broadcast Receiver ? (0) | 2020.03.26 |
Comments