smilevchy's blog

Life & Study & Chasing

Something About Installing Genymotion

趁着有时间安装了 Genymotion,它需要依据 Oracle 的 VirtualBox 来工作,所以就是说你还需要安装 Oracle VM VirtualBox 这个软件。

一般设计上来说,Genymotion 应该要提供一个位置来设置指向 VirtualBox 软件路径的,可是找了它的安装目录、软件界面设置都没有发现这个位置,所以就是说,它可能是固定指向 VirtualBox 的。

即,需要按照它给定的固定路径来安装 VirtualBox ,不然就无法启动成功。至于那个固定路径是什么,可以去它的日志文件里查找,如果没什么改变的话,位置一般是在用户数据文件夹里,名字为 genymotion.log。通过查看它的错误日志,找到指向 VirtualBox 时发生错误的日志记录,那里就有写该固定路径。

这是我自己遇到的错误,因为在安装 Genymotion 前我就一直使用 VirtualBox ,而且是自定义路径。 –_-所以需要卸载重装,安装它的固定路径。

Reaction to Effective Java

第一遍

  • 单元素的枚举类型已经成为实现 Singleton 的最佳方法
  • 清空对象引用应该是一种例外,而不是一种规范行为
  • 内存泄漏原因:
    • 一般而言,只要类是自己管理内存,程序员就应该警惕内存泄漏问题
    • 缓存
    • 监听器和其他回调
  • 内存泄漏解决方案:
    • 通常不会有明显表现,可能持续很长时间。只能通过仔细检查代码或者利用 Heap Profiler 才能发现
  • 尽量用静态工厂方法替代构造器
  • 当想使用 B 扩展(继承) A 时,问自己两个问题:
    • 每个 B 确实是 A 吗
    • 若 A 的 API 有缺陷,是否允许将其缺陷传播到 B 中

Interrogation of AsyncTask

当需要进行一项耗时久的任务时(下载文件、访问网络等),一般都知道必须在 worker thread 中进行。但是在现实场景中不可能单纯新建一个线程那么简单,大部分时候需要和 main thread 进行交互、或者说还要保证任务能够成功进行,不会遇到被销毁的情况。可是,单纯的 thread 并不具备这些能力。

那怎么办呢?

Call Function Lazily

某些场景下,在某些模块还未初始化完毕时就调用该模块的函数,可能会导致错误。这时候就需要延迟调用函数,等待该模块初始化完毕先再调用。