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
- collection
- MINUS
- ReactNative
- recyclerview
- list
- AWS
- Foreign Key
- lifecycle
- LiveData
- ConstraintLayout
- 생명주기
- vuex
- enum
- CLASS
- animation
- mongoose
- Generic
- class component
- Service
- Kotlin
- map
- react native
- docker
- Swift
- elementAt
- function
- Filter
- union
- docker-compose
- Interface
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