Android View 监听宿主生命周期
一、说明
今天遇到一个需求:
在自定义 View 中会有一个 Timer 定时任务执行更新 UI 操作,希望当页面退出时将定时任务停掉,否则可能由于定时任务无法释放导致内存泄露。
可能有人会建议将在 Activity 的 onDestroy 中停掉定时任务,但这种方式是比较难以维护的,你需要要求每一个用你的自定义 View 的技术人员都记得去释放一下,这不太现实,最好的方式是你的自定义 View 可以自己监听生命周期并进行释放。
二、解决方案
方案 1:将生命周期传入
将 Activity 的所有生命周期传入 View,是最直接也是最笨的一个方法,不到万不得已最好不要这样搞,否则很难维护。
方案 2:用 View 自带的生命周期
android view有以下14个周期:
- onFinishInflate() 当View中所有的子控件均被映射成xml后触发 。
- onMeasure( int , int ) 确定所有子元素的大小 。
- onLayout( boolean , int , int , int , int ) 当View分配所有的子元素的大小和位置时触发 。
- onSizeChanged( int , int , int , int ) 当view的大小发生变化时触发 。
- onDraw(Canvas) view渲染内容的细节。
- onKeyDown( int , KeyEvent) 有按键按下后触发 。
- onKeyUp( int , KeyEvent) 有按键按下后弹起时触发 。
- onTrackballEvent(MotionEvent) 轨迹球事件 。
- onTouchEvent(MotionEvent) 触屏事件 。
- onFocusChanged( boolean , int , Rect) 当View获取或失去焦点时触发 。
- onWindowFocusChanged( boolean ) 当窗口包含的view获取或失去焦点时触发 。
- onAttachedToWindow() 当view被附着到一个窗口时触发 。
- onDetachedFromWindow() 当view离开附着的窗口时触发,对应 onAttachedToWindow()。
- onWindowVisibilityChanged( int ) 当窗口中包含的可见的view发生变化时触发。
比如我想监听退出页面时停止任务,就可以把逻辑写在 onDetachedFromWindow 方法中。
方案 3:为 Activity 添加一个空白自定义 Fragment
这个方案借鉴 Glide 监听生命周期的原理,它会为 Activity 添加一个空白的自定义 Fragment,并在其中监听宿主的生命周期。
具体实现请参考:Glide源码分析3 -- 绑定Activity生命周期
Android View 监听宿主生命周期相关推荐
- 前端开发——Vue 监听组件生命周期
监听组件生命周期 通常我们使用 $emit 监听组件生命周期,父组件接收事件进行通知. 子组件 export default {mounted() {this.$emit( listenMounted ...
- android 如何监听应用前后台切换
今天,简单讲讲android如何判断应用切换到后台和应用切换到前台. 这个其实很简单,之前需要做一个功能,当app由后台进入前台时需要完成一些逻辑操作,所以在网上查找如何判断app由后台进入前台,最终 ...
- Android监听左右滑删除通知,Android 滑动监听RecyclerView线性流+左右划删除+上下移动...
废话不多说了,直接给大家贴代码了.具体代码如下所示: xmlns:tools="http://schemas.android.com/tools" android:layout_w ...
- Android RecyclerView 监听滑动
今天,简单讲讲Android 如何监听滑动. 不废话了,主要是需要做一个功能,实现RecyclerView滑动时,让一个标题栏固定显示在顶部. 基本知识: 列表的滚动一般分为两种: 手指按下 -> ...
- android listview ontouchlistener,Android ListView监听滑动事件的方法(详解)
ListView的主要有两种滑动事件监听方法,OnTouchListener和OnScrollListener 1.OnTouchListener OnTouchListener方法来自View中的监 ...
- android触摸滑动监听,Android 滑动监听的实例详解
Android 滑动监听的实例详解 摘要: ScollBy,ScollTo是对内容的移动,view.ScollyBy是对view的内容的移动 view,ScollTo是对内容的移动(移动到指定位置), ...
- android 输入法 监听,android 监听 输入法
场景:android 应用监听输入法按键事件[例如搜索和回车键等]的整个流程分析 android 应用监听输入法按键事件[比如搜索和回车键等]的整个流程分析 继承于InputMethodService ...
- android 控件监听方法是,Android | Android中监听Button的实现
Android中监听Button的实现 单按钮监听 2018-04-27_061911.jpg 1.在按钮所属的父Activity里,创建按钮变量 private Button mBtnTextVie ...
- android 监听动画过程,Android应用开发之Android动画监听实现方法
本文将带你了解Android应用开发Android动画监听实现方法,希望本文对大家学Android有所帮助. Android动画监听实现方法. package com.briup.anim; impo ...
- Android——滑动监听SwipeRefreshLayout+瀑布流Recycl+Butter自动生成
Android--滑动监听SwipeRefreshLayout+瀑布流Recycl+Butter自动生成 package c.example.jreduch09;import android.os.A ...
最新文章
- 跳至下一个断点_基金经理:DeFi将推动以太坊在下一个上涨周期中涨至9000美元...
- PHP文件操作常用函数总结
- java子类对象不能调用父类protected方法和域的原因。
- Windows Azure Tools DSInit Error
- Android数据绑定框架DataBinding用法
- 使用Microsoft Lookback网卡解决了断网情况下 Virtual Server 虚机和主机的网络连接
- 问题五十九:怎么求一元六次方程在区间内的所有不相等的实根(3)——修正一个问题
- 使用Opencv将RGB颜色空间转换到HSV颜色空间/灰度图
- 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_3_性能浪费的日志案例...
- 如何从云桌面(远程桌面)拷贝文件
- Linux中vim的安装和使用
- mockplus 原型设计工具
- 如何用单片机控制可控硅c语言程序,可控硅的斩波控制的实现--C语言源代码
- 六种找客户的方法销售人员需掌握
- 史上最通俗,彻底搞懂字符乱码问题的本质
- HA状态下防火墙损坏处理
- SQL优化 —— in与not in
- 1000桶水,其中一桶有毒,猪喝毒水后会在15分钟内死去,想用一个小时找到这桶毒水,至少需要几头猪?具体该如何实现方法讲解
- python实现统计文本当中单词数量
- 【编程语言】Scala 函数式编程