股票场内基金交易,没时间盯盘?

   
使用优财助手电脑客户端记录下您的股票买入卖出数据,能帮您时刻盯盘,会根据您记录的未售出买入价计算上涨或下跌幅度,及时弹框通知您。想知道如何使用?快点击左方视频观看了解吧~~下载地址:http://youcaizhushou.com

前言

Android 中 Handler 是开发中特别常用的知识。本人将分两篇来叙述 Handler。

  • 第一篇———— Handler 的用法
  • 第二篇———— 从源码分析 Handler 消息机制的实现

Handler 的功能

Handler 最常用的功能就是更新 UI。因为 Android 只能在主线程中更新 UI,但是更新 UI 之前往往要先更新数据,这就需要一些 I/O 操作,比如请求网络数据,或者读写文件。但是这些 I/O 操作大部分都比较耗时。而 Android 中的耗时操作又需要在子线程中执行。所以当耗时操作完成后我们需要将更新 UI 的操作切换到主线程,或者说将更新的数据发送到主线程。此时就用到了 Handler。从上面的描述中我们可以看到 Handler 的作用是将数据从子线程发送到主线程里去操作。那么同样的我们也可以将数据从主线程发送到子线程。此时,我可以得出结论,Handler 的功能是:实现线程间的数据传递。

Handler、Looper、Message 和 MessageQueue 的关系

Handler 向 MessageQueue 发送 Message,Looper 负责循环 MessageQueue 中的 Message 并向 Handler 分发 Message,最后 Handler 负责处理 Message。示意图如下

handler
Handler 消息机制示意图

Handler 用法

因为 Handler 工作时需要 Looper,所以我们要为当前线程创建一个 Looper。如下面代码:

但是 Android 的主线程会为我们默认初始化 Looper,所以如果在主线程中使用 Handler 就无需手动创建 Looper。通常情况下,我们使用 Handler 的默认工造函数创建 Handler 对象,并重写其 handleMessage 方法。代码如下:

然后,在耗时操作完成后,发送携带数据的 Message,代码如下:

其次,Handler 还可以通过 post 方法将一个 Runnable 对象投递到 Handler 中去处理。代码如下:

在上述代码中,我们使用匿名内部类的方式来使用 Handler,但是这种方式往往会导致内存泄露。因为匿名内部类默认持有外部类的引用,如果我们在 Activity 中通过上述代码使用 Handler,那么上述 Handler 对象将持有 Activity 的引用。而执行耗时操作的子线程持有 Handler 的引用。如果我们在耗时操作完成之前退出 Activity,而耗时操作还没有完成,那么子线程将继续在后台执行,将导致 Activity 不能被正常的销毁回收,所以将导致内存泄露。

Handler 引起的内存泄露的解决方法

使用静态内部类

因为静态内部类不会持有外部类的引用,所以我们可以使用静态内部类来解决内存泄露的问题,代码如下:

完善程序逻辑

  1. 在关闭 Activity 的时候停掉你的后台线程。线程停掉了,就相当于切断了 Handler 和外部连接的线,Activity 自然会在合适的时候被回收。
  2. 如果 Handler 是被 delay 的 Message 持有了引用,那么使用相应的 Handler 的 removeCallbacks() 方法,把消息对象从消息队列移除就行了。
   

想获得去掉 5 元限制的证券账户吗?

证券交易股票基金的佣金,不足 5 元会按照 5 元收取。比如交易 1000 元的股票,按照普遍的证券佣金手续费率万 2.5,其交易佣金为 0.25 元,小于 5 元,实际会收取佣金 5 元,买卖两次需要支付 10 元佣金成本,1% 的利润就这样没了。

如果您想去掉最低交易佣金 5 元限制,使用微信扫描左边小程序二维码,访问微信小程序「优财助手」,点击底部菜单「福利」,阅读文章「通过优财开证券账户无最低交易佣金 5 元限制」,按照文章步骤操作即可获得免 5 元证券账户,股票基金交易手续费率万 2.5。

请注意,一定要按照文章描述严格操作,如错误开户是无法获得免 5 元证券账户的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注