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

网站建设主体设计要求网站怎么营销推广

网站建设主体设计要求,网站怎么营销推广,wordpress 内容 只调图片大小,wordpress-5.0.3一、介绍 Handler#xff0c;作为一个在主线程存活的消息分发工具#xff0c;在App开发过程使用频率很高#xff0c;也是面试问的比较多的。 面试常见的比如#xff1a;子线程如何创建#xff1f;Handler的机制是什么#xff1f;内存抖动等#xff0c;接下来我们会针对H…一、介绍 Handler作为一个在主线程存活的消息分发工具在App开发过程使用频率很高也是面试问的比较多的。 面试常见的比如子线程如何创建Handler的机制是什么内存抖动等接下来我们会针对Handler的使用进行总结与指导 二、使用 1.在主线程的使用 在主线程的使用是Handler比较常见的一种写法如下 var handlerHandler()这样就创建完了 但是有人会说我们在使用过程中与弱引用搭配起来。 public abstract class WeakHanlderT extends Handler {private WeakReferenceT weakReference;public WeakHanlder(T activity) {weakReference new WeakReferenceT(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 WeakReferenceT getWeakReference() {return weakReference;}} 若引用可以很好的规避当前target的对象被回收handler的消息还没有被消费完毕会引起OOM。 1.2、内存抖动 内存抖动产生的直接原因对象不行的创建与消费这种现象可以通过AndroidStudio的profiler的工具可以直接看到 如果不停的释放和创建波普图想我们见到的心电图一样上下来回波浪线形成的是抖动状态。 这样是什么原因导致的 Handler在发送消息的时候我们不应一直通过new Message来创建 应该通过handler.obtain(),这样是复用内存中的在Message中有一个对象是mPool这就是当前Message线程池用到了就取一个不用了就释放了。 var handlerHandler()var msg handler.obtainMessage()msg.what0;handler.sendMessage(msg) 如果我们只发送一个通知可以直接通过发送一个空消息 handler.sendEmptyMessage(1) 1.3、OOM handler被问频率比较高的莫过于oomoom原因大家应该都很清楚。这个和GC回收有关GC回收分为两种情况一种是GC还有就是GCRoot。GCRoot就是我们常定义的static变量。 如果我们不手动回收static对象GCRoot是不会释放所以还有一种就是定义成静态变量使用 companion object{var handlerHandler()} 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 threadTestThread()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来完成有人会问为什么不sleepsleep会导致线程阻塞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://www.hkea.cn/news/14355892/

相关文章:

  • 四大门户网站做网站需要学习什么知识
  • 怎么做产品的网站新手如何涨1000粉
  • 广东网站备案审核时间网页搜索框的记录怎么删除
  • 培训网站建设平台wordpress 自动 发微博
  • 十大网站app排行榜cn域名与com域名
  • 哪个网站可以做封面想自己建一个公司网站怎么做
  • 中原彼得堡航空学院网站的建设做网站找哪个公司好
  • 如何介绍网站模板下载公司内部小程序开发公司
  • 自主免费建站网站wordpress退出代码
  • 设计电子商务网站建设方案asp网络公司程序 网站公司企业建设源码 网站设计模板seo优化
  • 毕业设计 旅游网站建设网络营销推广活动方案
  • 彩票网站开发制作需要什么建设网站上申请劳务资质吗
  • 河南微网站建设公司哪家好上海网站建设服务商
  • 网站备案证书下载密码忘了英语课件做的好的网站
  • 网站制作源码版权网页开发工具软件
  • 潍坊网站制作公司哪家比较好关键词优化技巧有哪些
  • 做网站优化有什么途径自适应企业网站源码
  • 泰安集团网站建设公司seow
  • 网站建设收费标准公司手机网站 生成app
  • 四川哪家网站做的最好游戏推广代理加盟
  • 海城 网站建设三合一商城网站
  • 哪些网站可以做外部锚文本wordpress在线安装插件在哪里
  • 松江网站开发培训班成都建筑网站建设
  • 福甭市建设局网站顺企网下载
  • wordpress建站专家wordpress 跳转 文章
  • 做养生的网站多吗用什么编辑wordpress
  • 宜昌市做网站WordPress数字商城模板
  • 网站框架优化淮北论坛租房信息
  • 下载建网站主题字体wordpress
  • wordpress 手工网站广州交易中心