一、说明

今天遇到一个需求:

在自定义 View 中会有一个 Timer 定时任务执行更新 UI 操作,希望当页面退出时将定时任务停掉,否则可能由于定时任务无法释放导致内存泄露。

可能有人会建议将在 Activity 的 onDestroy 中停掉定时任务,但这种方式是比较难以维护的,你需要要求每一个用你的自定义 View 的技术人员都记得去释放一下,这不太现实,最好的方式是你的自定义 View 可以自己监听生命周期并进行释放。

二、解决方案

方案 1:将生命周期传入

将 Activity 的所有生命周期传入 View,是最直接也是最笨的一个方法,不到万不得已最好不要这样搞,否则很难维护。

方案 2:用 View 自带的生命周期

android view有以下14个周期:

  1. onFinishInflate() 当View中所有的子控件均被映射成xml后触发 。
  2. onMeasure( int , int ) 确定所有子元素的大小 。
  3. onLayout( boolean , int , int , int , int ) 当View分配所有的子元素的大小和位置时触发 。
  4. onSizeChanged( int , int , int , int ) 当view的大小发生变化时触发 。
  5. onDraw(Canvas) view渲染内容的细节。
  6. onKeyDown( int , KeyEvent) 有按键按下后触发 。
  7. onKeyUp( int , KeyEvent) 有按键按下后弹起时触发 。
  8. onTrackballEvent(MotionEvent) 轨迹球事件 。
  9. onTouchEvent(MotionEvent) 触屏事件 。
  10. onFocusChanged( boolean , int , Rect) 当View获取或失去焦点时触发 。
  11. onWindowFocusChanged( boolean ) 当窗口包含的view获取或失去焦点时触发 。
  12. onAttachedToWindow() 当view被附着到一个窗口时触发 。
  13. onDetachedFromWindow() 当view离开附着的窗口时触发,对应 onAttachedToWindow()。
  14. onWindowVisibilityChanged( int ) 当窗口中包含的可见的view发生变化时触发。

比如我想监听退出页面时停止任务,就可以把逻辑写在 onDetachedFromWindow 方法中。

方案 3:为 Activity 添加一个空白自定义 Fragment

这个方案借鉴 Glide 监听生命周期的原理,它会为 Activity 添加一个空白的自定义 Fragment,并在其中监听宿主的生命周期。

具体实现请参考:Glide源码分析3 -- 绑定Activity生命周期

Android View 监听宿主生命周期相关推荐

  1. 前端开发——Vue 监听组件生命周期

    监听组件生命周期 通常我们使用 $emit 监听组件生命周期,父组件接收事件进行通知. 子组件 export default {mounted() {this.$emit( listenMounted ...

  2. android 如何监听应用前后台切换

    今天,简单讲讲android如何判断应用切换到后台和应用切换到前台. 这个其实很简单,之前需要做一个功能,当app由后台进入前台时需要完成一些逻辑操作,所以在网上查找如何判断app由后台进入前台,最终 ...

  3. Android监听左右滑删除通知,Android 滑动监听RecyclerView线性流+左右划删除+上下移动...

    废话不多说了,直接给大家贴代码了.具体代码如下所示: xmlns:tools="http://schemas.android.com/tools" android:layout_w ...

  4. Android RecyclerView 监听滑动

    今天,简单讲讲Android 如何监听滑动. 不废话了,主要是需要做一个功能,实现RecyclerView滑动时,让一个标题栏固定显示在顶部. 基本知识: 列表的滚动一般分为两种: 手指按下 -> ...

  5. android listview ontouchlistener,Android ListView监听滑动事件的方法(详解)

    ListView的主要有两种滑动事件监听方法,OnTouchListener和OnScrollListener 1.OnTouchListener OnTouchListener方法来自View中的监 ...

  6. android触摸滑动监听,Android 滑动监听的实例详解

    Android 滑动监听的实例详解 摘要: ScollBy,ScollTo是对内容的移动,view.ScollyBy是对view的内容的移动 view,ScollTo是对内容的移动(移动到指定位置), ...

  7. android 输入法 监听,android 监听 输入法

    场景:android 应用监听输入法按键事件[例如搜索和回车键等]的整个流程分析 android 应用监听输入法按键事件[比如搜索和回车键等]的整个流程分析 继承于InputMethodService ...

  8. android 控件监听方法是,Android | Android中监听Button的实现

    Android中监听Button的实现 单按钮监听 2018-04-27_061911.jpg 1.在按钮所属的父Activity里,创建按钮变量 private Button mBtnTextVie ...

  9. android 监听动画过程,Android应用开发之Android动画监听实现方法

    本文将带你了解Android应用开发Android动画监听实现方法,希望本文对大家学Android有所帮助. Android动画监听实现方法. package com.briup.anim; impo ...

  10. Android——滑动监听SwipeRefreshLayout+瀑布流Recycl+Butter自动生成

    Android--滑动监听SwipeRefreshLayout+瀑布流Recycl+Butter自动生成 package c.example.jreduch09;import android.os.A ...

最新文章

  1. 跳至下一个断点_基金经理:DeFi将推动以太坊在下一个上涨周期中涨至9000美元...
  2. PHP文件操作常用函数总结
  3. java子类对象不能调用父类protected方法和域的原因。
  4. Windows Azure Tools DSInit Error
  5. Android数据绑定框架DataBinding用法
  6. 使用Microsoft Lookback网卡解决了断网情况下 Virtual Server 虚机和主机的网络连接
  7. 问题五十九:怎么求一元六次方程在区间内的所有不相等的实根(3)——修正一个问题
  8. 使用Opencv将RGB颜色空间转换到HSV颜色空间/灰度图
  9. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_3_性能浪费的日志案例...
  10. 如何从云桌面(远程桌面)拷贝文件
  11. Linux中vim的安装和使用
  12. mockplus 原型设计工具
  13. 如何用单片机控制可控硅c语言程序,可控硅的斩波控制的实现--C语言源代码
  14. 六种找客户的方法销售人员需掌握
  15. 史上最通俗,彻底搞懂字符乱码问题的本质
  16. HA状态下防火墙损坏处理
  17. SQL优化 —— in与not in
  18. 1000桶水,其中一桶有毒,猪喝毒水后会在15分钟内死去,想用一个小时找到这桶毒水,至少需要几头猪?具体该如何实现方法讲解
  19. python实现统计文本当中单词数量
  20. 【编程语言】Scala 函数式编程

热门文章

  1. Ubuntu Linux DNS服务器 BIND9配置文件命令介绍
  2. 自动化的机器学习:5个常用AutoML 框架介绍
  3. 这些你曾深信不疑的大众心理学观点,都是谬论!
  4. c语言计算梯形的面积
  5. TSO、UFO、GSO、LRO、GRO和RSS介绍
  6. kvm几种快照的创建与删除
  7. 有关php的外国参考文献,php论文英文参考文献
  8. 分享:微信淘宝客自动查券找券返利机器人实现的原理和思路
  9. 【无标题】工商银行科技菁英岗笔经面经
  10. html ul做成表格,HTML+CSS入门 ul打造表格样式解析