纯笔记

  • Android 内存泄漏实例分析
  • 性能优化合辑

问题

MyLinkMovementMethod 为单例,TouchableSpan 一旦被实例化出来,除非手动置为 null,否则不会释放,而由于它是 TagTextView 的内部类,所以持有这个 TextView 的引用,TextView 是被MainActivity 创建出来的,最终导致 MainActivity 无法被回收。

MyLinkMovementMethod --> TagTextView.TouchableSpan --> TagTextView --> MainActivity

Solution

  • TagTextView.Span 变为 static,静态内部类不持有外部类的引用,就像 Handler 要用static一样。
  • MyLinkMovementMethod 中不能有 Span 这个成员变量,让 Span 引用只存在于某个方法的作用域中。
  • TagTextViewTouchEventUP 时,应手动将 Span 置为 null

设计角度看问题

tag 的点击事件应该传递到外部去,不应该由 Span 自己处理跳转到另外一个 Activity 中去,这不符合设计原则,如果某个Tag跳转的activity不是固定的怎么办呢?

自定义View的职责应该是单一的,只负责接收事件,解析事件,具体的解决事件应该由上层来处理,不然就没法复用了。

更多相关文章

  1. Android中从图库中选取图片实例详解
  2. Android中ExpandableListView的用法实例
  3. 一个关于android中ListView的子控件中按钮事件的简单方法
  4. android的触摸事件
  5. [置顶] Android WebKit消息处理(二)Touch事件的分发处理
  6. android 事件分发之dispatchTouchEvent()用法
  7. [Android]RecyclerView基本使用+adapter回调接口实现点击事件
  8. android用户界面之Notification教程实例汇总
  9. Android监听Home键实例详解

随机推荐

  1. android 开发中的Log
  2. 基于ffmpeg的Android播放器开源代码
  3. android图片轮播+点击跳转广告页面
  4. android 按键
  5. 2011.06.29(2)——— android 完全退出
  6. Android(安卓)ContentProvider的介绍
  7. 小米,红米手机android 6.0以下 权限管理
  8. 《Android(安卓)Studio 问题解决集锦》
  9. 林志华_Android
  10. cmake 编译 ogre3D(version1.9) for androi