getActivity / Toaster

Android 吐司框架,专治 Toast 各种疑难杂症
Apache License 2.0
3.2k stars 404 forks source link

内存泄露问题 #63

Closed libern closed 3 years ago

libern commented 3 years ago

image

当点击按钮,新开一个activity,在activity中使用getActivity/TitleBar,点击返回时,导致内存溢出。

具体步骤:点击按钮新开activity-》点击返回-》显示toast-》在toast还在显示时,再次按钮新开activity-》点击返回-》显示toast(此时这个toast没有显示,而导致的内存泄漏)

image


    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        val context = requireContext()
        val activity = requireActivity()

        // 给这个 ToolBar 设置顶部内边距,才能和 TitleBar 进行对齐
        val mTitleBar: TitleBar = view.findViewById(R.id.titleBar)
        mTitleBar.setOnTitleBarListener(object : OnTitleBarListener {
            override fun onLeftClick(v: View) {
                activity.finish()
                ToastUtils.show("左项View被点击")
            }

            override fun onTitleClick(v: View) {
                ToastUtils.show("中间View被点击")
            }

            override fun onRightClick(v: View) {
                ToastUtils.show("右项View被点击")
            }
        })
getActivity commented 3 years ago

从泄漏的堆栈来看,View 静态持有 Application 对象,但是 Application 作为静态持有是不会导致内存泄漏的,因为静态和 Application 的生命周期是保持一致。

getActivity commented 3 years ago

小伙子,你的 LeakCanary 是不是 2.6 版本的?

timmy-gzw commented 3 years ago

我也是一样的,报内存泄漏,LeakCanary 是 2.6 版本的

getActivity commented 3 years ago

把版本回退到 2.5 就可以了

libern commented 3 years ago

这个是LeakCanary的问题么?确定不是你这边需要改些什么吗?

getActivity commented 3 years ago

@libern 是的小伙子,我确定以及肯定