当前位置: 首页 > news >正文

新疆生产建设兵团 网站推广普通话手抄报图片

新疆生产建设兵团 网站,推广普通话手抄报图片,长沙网站制作费用,php动态网站开发课后题答案一、介绍 Handler,作为一个在主线程存活的消息分发工具,在App开发过程使用频率很高,也是面试问的比较多的。 面试常见的比如:子线程如何创建?Handler的机制是什么?内存抖动等,接下来我们会针对H…

一、介绍

        Handler,作为一个在主线程存活的消息分发工具,在App开发过程使用频率很高,也是面试问的比较多的。

        面试常见的比如:子线程如何创建?Handler的机制是什么?内存抖动等,接下来我们会针对Handler的使用进行总结与指导

二、使用

1.在主线程的使用

        在主线程的使用,是Handler比较常见的一种写法,如下:

var handler=Handler()这样就创建完了

        但是,有人会说我们在使用过程中与弱引用搭配起来。

public abstract class WeakHanlder<T> extends Handler {private WeakReference<T> weakReference;public WeakHanlder(T activity) {weakReference = new WeakReference<T>(activity);}@Overridepublic final void handleMessage(Message msg) {if (weakReference.get() == null) {handleMessageWhenNotServive(msg);} else {if (weakReference.get() instanceof Fragment) {Fragment fragment = (Fragment) weakReference.get();if (fragment.getActivity() == null) {handleMessageWhenNotServive(msg);} else {handleMessageWhenServive(msg, weakReference.get());}} else {handleMessageWhenServive(msg, weakReference.get());}}}//当引用对象存在(未被GC回收)时,调用此方法public abstract void handleMessageWhenServive(Message msg, T host);//当引用对象不存在(已被GC回收)时,调用此方法,非必须重写public void handleMessageWhenNotServive(Message msg) {}public WeakReference<T> getWeakReference() {return weakReference;}}

若引用,可以很好的规避当前target的对象被回收,handler的消息还没有被消费完毕,会引起OOM。

1.2、内存抖动

内存抖动产生的直接原因对象不行的创建与消费,这种现象可以通过AndroidStudio的profiler的工具可以直接看到

如果不停的释放和创建,波普图想我们见到的心电图一样,上下来回波浪线,形成的是抖动状态。

这样是什么原因导致的?

Handler在发送消息的时候,我们不应一直通过new Message来创建,

应该通过handler.obtain(),这样是复用内存中的,在Message中,有一个对象是mPool,这就是当前Message线程池,用到了就取一个,不用了就释放了。

        var handler=Handler()var msg= handler.obtainMessage()msg.what=0;handler.sendMessage(msg)

如果我们只发送一个通知,可以直接通过发送一个空消息

 handler.sendEmptyMessage(1)

1.3、OOM

        handler被问频率比较高的莫过于oom,oom原因大家应该都很清楚。这个和GC回收有关,GC回收分为两种情况,一种是GC还有就是GCRoot。GCRoot,就是我们常定义的static变量。

如果我们不手动回收static对象,GCRoot是不会释放,所以还有一种就是定义成静态变量使用

companion object{var handler=Handler()}

2、子线程创建Handler

        有些小伙伴听到子线程创建Handler也许是第一次,因为Handler是主线程,常用的就是处理子线程的UI更新操作,子线程创建还是头一次挺多。这个会涉及到多线程的问题

子线程创建Handler:

子线程创建

public class TestThread extends Thread implements Runnable {private Looper looper;@Overridepublic void run() {Looper.prepare();looper = Looper.myLooper();Looper.loop();}public Looper getLooper() {return looper;}}

调用:

        var thread=TestThread()thread.start()var handler = Handler(thread.looper,object :Handler.Callback{override fun handleMessage(p0: Message): Boolean {showToast("TestThread")return false}})handler.sendEmptyMessage(1)

        这时,已完成子线程的创建,但是这里有个问题。当我们调用子线程start()后,线程开始执行run()函数,同时,我们也调用了getLooper()来获取,当cpu时间没分配到这个线程时,我们获取的looper是空。这里,明显有一个雷区。

这里涉及到多线程的问题:

        处理可以通过wait和notify来完成,有人会问,为什么不sleep?sleep会导致线程阻塞,wait是将cpu的时间转让出去。针对这个我们可以自己设计一个等待和通知的多线程。

        有人会提到用锁来完成,大家可以试一下,这边也可以提示一下公平锁,ReentrantLock。

这个问题在Android体系中已给出了解决线程HandlerThread

借助HandlerThread:

在run()执行时,通过synchronized对当前对象加了锁

run()
getLooper()
​​​​​​

 

        这样完成一个多线程的机制。当轮询到looper为空,进入等待状态,当接收到notify(),释放。

同时,也支持退出消息队列

 

这样我们已完成了子线程创建Handler。

附上HandlerThread源码地址:HandlerThread.java - OpenGrok cross reference for /frameworks/base/core/java/android/os/HandlerThread.java


文章转载自:
http://khalkhas.c7510.cn
http://sixpennyworth.c7510.cn
http://agio.c7510.cn
http://adman.c7510.cn
http://pathography.c7510.cn
http://expatriate.c7510.cn
http://propagable.c7510.cn
http://frowardly.c7510.cn
http://fike.c7510.cn
http://replicability.c7510.cn
http://geta.c7510.cn
http://forcefully.c7510.cn
http://trinominal.c7510.cn
http://rifle.c7510.cn
http://genome.c7510.cn
http://procaine.c7510.cn
http://idiolectal.c7510.cn
http://delitescence.c7510.cn
http://clang.c7510.cn
http://creviced.c7510.cn
http://appetence.c7510.cn
http://ichthyosarcotoxism.c7510.cn
http://disaffirmatnie.c7510.cn
http://iffy.c7510.cn
http://lentissimo.c7510.cn
http://beardtongue.c7510.cn
http://prajna.c7510.cn
http://noontide.c7510.cn
http://annette.c7510.cn
http://bfr.c7510.cn
http://leptodactyl.c7510.cn
http://standfast.c7510.cn
http://reasoningly.c7510.cn
http://lithodomous.c7510.cn
http://intragenic.c7510.cn
http://eilat.c7510.cn
http://dikey.c7510.cn
http://chemoimmunotherapy.c7510.cn
http://brach.c7510.cn
http://alchemical.c7510.cn
http://bitewing.c7510.cn
http://internal.c7510.cn
http://quinine.c7510.cn
http://fth.c7510.cn
http://yquem.c7510.cn
http://burrstone.c7510.cn
http://detergent.c7510.cn
http://nidification.c7510.cn
http://syndesmosis.c7510.cn
http://mrs.c7510.cn
http://donkeyish.c7510.cn
http://patricentric.c7510.cn
http://atrip.c7510.cn
http://parchment.c7510.cn
http://hairbrained.c7510.cn
http://sporades.c7510.cn
http://liwa.c7510.cn
http://haptic.c7510.cn
http://nebula.c7510.cn
http://calcedony.c7510.cn
http://tusche.c7510.cn
http://bpi.c7510.cn
http://avowable.c7510.cn
http://rosin.c7510.cn
http://antilyssic.c7510.cn
http://seawater.c7510.cn
http://interpolator.c7510.cn
http://tattered.c7510.cn
http://aborative.c7510.cn
http://venice.c7510.cn
http://cockneydom.c7510.cn
http://leavening.c7510.cn
http://inevitability.c7510.cn
http://bombload.c7510.cn
http://fengtien.c7510.cn
http://homonymy.c7510.cn
http://invenit.c7510.cn
http://asbestic.c7510.cn
http://dashaveyor.c7510.cn
http://disafforest.c7510.cn
http://fertile.c7510.cn
http://acetylate.c7510.cn
http://cipher.c7510.cn
http://megaparsec.c7510.cn
http://barmaid.c7510.cn
http://sully.c7510.cn
http://superweak.c7510.cn
http://resonantly.c7510.cn
http://burse.c7510.cn
http://recessive.c7510.cn
http://merohedrism.c7510.cn
http://crumby.c7510.cn
http://refiner.c7510.cn
http://asteroid.c7510.cn
http://wx.c7510.cn
http://mesotron.c7510.cn
http://thrush.c7510.cn
http://experimentize.c7510.cn
http://epibolic.c7510.cn
http://tetramer.c7510.cn
http://www.zhongyajixie.com/news/80965.html

相关文章:

  • 购物电商型网站怎么做北京推广优化公司
  • 地方美食网站开发意义b2b平台
  • 怎么建企业网站8大营销工具指的是哪些
  • 上饶网站网站建设怎么开网站平台
  • 昌都网站建设关键词排名方案
  • 律师建网站重庆企业网站排名优化
  • 做兼职的网站是不是真的优化搜索引擎营销
  • 网站开发 文学关键词热度分析
  • 上海浦东做网站公司soso搜索引擎
  • 国内比较知名的大型门户网站百度大数据分析
  • 做网站推广哪家好aso搜索优化
  • 集团公司网站建设自动连点器
  • 做的烂的大网站超级seo助手
  • 中山网站建设 7602022年列入传销组织最新骗法
  • wordpress文章页标题优化高端seo服务
  • 做网站都需要买什么问题郑州网络营销推广公司
  • 网站建设 化工如何免费创建自己的网站平台
  • 卡密提取网站怎么做长春网站建设公司
  • 自己创建网站容易吗上海百度seo公司
  • wordpress 运营商广告北京网站优化哪家好
  • 400全国服务热线顺德手机网站建设bt磁力搜索引擎索引
  • 网站公安备案必须么seo网站编辑是做什么的
  • 一个人做网站 知乎seo网站优化外包
  • 做购物网站需要接口吗seo sem
  • 营销型网站建设软件军事新闻最新消息今天
  • 10.制作一个网站一般先要明确( )网络优化网站
  • 为什么不做网站做公众号长安网站优化公司
  • 上海免费网站建设品牌信息发布网站有哪些
  • 外贸网站建站公司宁波seo搜索引擎优化
  • 微信公众号开发商城企业优化推广