2018-08-01 Handler AsyncTask

如果我们要在主线程中完成耗时工作那么肯定会柱堵塞主线程,那么用户体验就会很差,因此我们需要使用子线程。但是如果在子线程中更新UI组件那么就会出现异常,原因很简单,android 的 UI 也会线程不安全。下面介绍使用 handler 更新UI

定义内部类Hadler方法时,要重写方法 handlerMessage(),可以在其中定义线程。

下面介稍 hander 的内部原理。

首先说明 为什么用 handler.obtainMessage ,不用 new 因为 Hendler有一个消息池,用于存储messge 可以反复使用,每个线程只有一个 MessageQueue与 Handler绑定。

上面是使用 Handler 更新UI的基本方法,但是细心的你会发现其中定义的内部类Hanlder代码是黄色Waring  警告的,这是为什么呢? 因为这样写存在内存泄漏问题,因为内部类依赖外部类,当外部类退出,而这个静态内部类依然在运行,那么外部类依然占用内存,并且不能访问数据,这就是内存泄露问题。解决饭方法很简单,使用静态内部类就行了,并且使用弱引用,弱引用就是当内存不够时,系统就会回收内存,使用如下。

接下来介绍使用 Handler 来设置闪屏页。首先找一张图片,放在 mipmap 中,当然你需要根据图片大小来选择几个x的,如果选择不当会报错 。当然,启动页是没有 ActionBar的,所以需要进行设置,继承Activity 而不是 AppCompatActivity,然后在清单文件中设置主题。当然也可是其他没有ActionBar 的。

然后进行布局设置,这里直接使用ImageView 并直接添加图片。

然后在闪屏页的主页进行设置,这里没有使用标准的写法,原因是这里的内部类并不耗时。然后别忘记了 finish() 否则按回退键会返回到 商品页 这样用户体验就会极差。

以上是使用 线程加Handler 来实现异步任务,接下来介绍是使用AsyncTask  这是系统封装好的使用异步任务。具体 参数 四个方法 如下

具体实现如下

具体思想就是上面这样,但是可以分情况选项使用那个方法。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,196评论 25 709
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,803评论 8 265
  • 小A是我们班级我们专业的学霸,一个美美的朝鲜族妹子。连续两年的一等奖学金和三好学生,两年期间英语四六级证书,计算机...
    简不悔阅读 3,233评论 2 0
  • 再过两天就可以放寒假了,我非常的开心,回家 瞅见妈妈买了一些 掏耳朵的工具,这些 掏耳朵的工具 并不是普通的 ...
    uc闲梦阅读 1,079评论 0 1
  • 工作: 今天是真的很忙…… 许多事情赶在一起,有点焦头烂额呢。 体系审核需要的一些文件都没有完成… 医保年检如火如...
    俏村姑阅读 1,365评论 0 0