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

高端网站优化公司平面设计模板

高端网站优化公司,平面设计模板,北京公司模板网站,上海巴士公司什么时候需要 Looper Looper用于封装了android线程中的消息循环#xff0c;默认情况下一个线程是不存在消息循环#xff08;message loop#xff09;的#xff0c;需要调用Looper.prepare()来给线程创建一个消息循环#xff0c;调用Looper.loop()来使消息循环起作用#…  什么时候需要 Looper   Looper用于封装了android线程中的消息循环默认情况下一个线程是不存在消息循环message loop的需要调用Looper.prepare()来给线程创建一个消息循环调用Looper.loop()来使消息循环起作用使用Looper.prepare()和Looper.loop()创建了消息队列就可以让消息处理在该线程中完成。   使用Looper需要注意什么   写在Looper.loop()之后的代码不会被立即执行当调用后mHandler.getLooper().quit()后loop才会中止其后的代码才能得以运行。Looper对象通过MessageQueue来存放消息和事件。一个线程只能有一个Looper对应一个MessageQueue。 比如下面的代码只要调用了getLooper().quit()后代码2才会执行。 1 class LooperThread extends Thread2 {3 4 public void run() 5 {6 Looper.prepare();7 //代码1....8 Looper.loop();9 //代码2.... 10 } 11 }   警惕线程未终止造成的内存泄露譬如在Activity中关联了一个生命周期超过Activity的Thread在退出Activity时切记结束线程。一个典型的例子就是HandlerThread的run方法是一个死循环它不会自己结束线程的生命周期超过了Activity生命周期我们必须手动在Activity的销毁方法中中调运thread.getLooper().quit();才不会泄露。     Looper与Activity Activity的MainUI线程默认是有消息队列的。所以在Activity中新建Handler时不需要先调用Looper.prepare()   主线程中的Looper.loop()一直无限循环为什么不会造成ANR ActivityThread.java 是主线程入口的类这里你可以看到写Java程序中司空见惯的main方法而main方法正是整个Java程序的入口。   ActivityThread源码 1 public static final void main(String[] args) { 2 ... 3 //创建Looper和MessageQueue 4 Looper.prepareMainLooper(); 5 ... 6 //轮询器开始轮询 7 Looper.loop(); 8 ... 9 } Looper.loop()方法 1 while (true) { 2 //取出消息队列的消息可能会阻塞 3 Message msg queue.next(); // might block 4 ... 5 //解析消息分发消息 6 msg.target.dispatchMessage(msg); 7 ... 8 } ActivityThread的main方法主要就是做消息循环一旦退出消息循环那么你的应用也就退出了。那为什么这个死循环不会造成ANR异常呢 因为Android 的是由事件驱动的looper.loop() 不断地接收事件、处理事件每一个点击触摸或者说Activity的生命周期都是运行在 Looper.loop() 的控制之下如果它停止了应用也就停止了。只能是某一个消息或者说对消息的处理阻塞了 Looper.loop()而不是 Looper.loop() 阻塞它。也就说我们的代码其实就是在这个循环里面去执行的当然不会阻塞了。 handleMessage方法部分源码 1 public void handleMessage(Message msg) {2 if (DEBUG_MESSAGES) Slog.v(TAG, handling: codeToString(msg.what));3 switch (msg.what) {4 case LAUNCH_ACTIVITY: {5 Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, activityStart);6 final ActivityClientRecord r (ActivityClientRecord) msg.obj;7 r.packageInfo getPackageInfoNoCheck(r.activityInfo.applicationInfo, r.compatInfo);8 handleLaunchActivity(r, null);9 Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER); 10 } 11 break; 12 case RELAUNCH_ACTIVITY: { 13 Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, activityRestart); 14 ActivityClientRecord r (ActivityClientRecord) msg.obj; 15 handleRelaunchActivity(r); 16 Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER); 17 } 18 break; 19 case PAUSE_ACTIVITY: 20 Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, activityPause); 21 handlePauseActivity((IBinder) msg.obj, false, (msg.arg1 1) ! 0, msg.arg2, (msg.arg1 2) ! 0); 22 maybeSnapshot(); 23 Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER); 24 break; 25 case PAUSE_ACTIVITY_FINISHING: 26 Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, activityPause); 27 handlePauseActivity((IBinder) msg.obj, true, (msg.arg1 1) ! 0, msg.arg2, (msg.arg1 1) ! 0); 28 Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER); 29 break; 30 ........... 31 } 32 } 可以看见Activity的生命周期都是依靠主线程的Looper.loop当收到不同Message时则采用相应措施。 如果某个消息处理时间过长比如你在onCreate(),onResume()里面处理耗时操作那么下一次的消息比如用户的点击事件不能处理了整个循环就会产生卡顿时间一长就成了ANR。 总结   Looper: 每个线程只有一个Looper负责管理MessageQueue,会不断地从MessageQueue中取出消息并将消息分给对应的Handler处理。   MessageQueue:由Looper负责管理采用先进先出的方式管理Message(消息队列)。   Handler把消息发送给Looper管理的MessageQueue并负责处理Looper分给它的消息。     消息只能在某个具体的Looper上消耗因此每个Handler都会绑定一个Looper。但是多个Handler可以绑定同一个Looper这也是在主线程中能够创建新的Handler的原因。       引用http://www.jianshu.com/p/cfe50b8b0a41  转载于:https://www.cnblogs.com/l2rf/p/6055218.html
http://www.yutouwan.com/news/318248/

相关文章:

  • 网站开发流程pptwordpress指定关键词自动内链
  • 珠宝企业的门户网站开发知乎自媒体平台注册
  • wamp在网站建设中的功能及协作关系深圳网站seo优化公司
  • 阿里云备案 网站备案域名购买什么网站从做系统
  • 营销型网站建设调查表如何做公司介绍视频网站
  • 如何备份网站网站做营销推广的公司
  • 商丘网站建设推广渠道企业网站建设的意义
  • 票务网站开发端口iis网站目录权限
  • 做灯饰的企业都会在哪些网站网站设计规划说明书
  • 网站推广哪个平台好中英文网站栏目修改
  • 海南网站优化公司广州市网络预约出租汽车综合业务管理平台
  • 新做的网站怎样让百度收录金华网站建设公司
  • 上海市网站建设公司58wordpress 猫
  • 自适应自助建站网站人才招聘网站建设
  • 外贸网站搜索引擎优化方法杭州网站建设app
  • 绍兴网页设计优化师是一份怎样的工作
  • 做网站源码需要多少钱泊头在哪做网站比较好
  • 搜狗网站做滤芯怎么样营销型企业网站功能
  • 江西网站建设与推广湛江网站建设外包
  • 做网站注意设么专业网站制作推荐
  • 湛江公司做网站景德镇陶瓷学院校友做网站的
  • 深圳公司网站开发苏州网站开发建设公司
  • 用vs2010做免费网站模板下载地址模板网站怎么修改
  • 怎么创立网站购物网站 怎么做
  • 宿州做网站做网站一个月能挣多少钱
  • 渝北集团网站建设商城成品网站
  • 社区网站设计制作空间主页网站
  • 2017淘宝客网站怎么做惠州个人做网站联系人
  • 专注高密做网站的网站开发好学嘛
  • 怎样在各大网站发布信息电商网店代运营