当前位置: 首页 > 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.pierceye.com/news/964772/

相关文章:

  • 上海专业网站建设市场网站开发验收报告
  • 怎么做网站视频教程做广告牌子
  • 合肥做网站公网站设网页设计
  • 罗田做网站凡科网小程序
  • 玻璃钢产品哪个网站做推广好.加强网站安全建设
  • 扬州公司网站建设网络建设与管理包括哪些方面
  • 我的网站域名福州网站的优化
  • 威海市网站建设微信在线登录平台
  • 2014网站设计成都网站设计合理柚v米科技
  • 建设自己网站需要多钱网站规划与设计就业
  • 用flash做的网站欣赏手机网站图片切换jquery
  • 昆明做网站seo网站推广策略什么时候
  • 网站添加 百度商桥wordpress 友情链接 代码
  • 一鸿建设设计网站百家号排名
  • 网站最新一次改版时间什么意思电商平台应该如何推广
  • 网站设计制作程序网站开发列表
  • 企业网站建设需要哪些费用做算法的网站
  • 很大气的网站 营销js特效网站展示
  • 南宁建站程序成都新线加网站建设
  • 用微软雅黑做网站可以吗wordpress游客发帖插件
  • 网站备案怎样提交管局网页电商设计
  • 郑州华恩科技做网站怎么样网络竞价推广托管公司
  • 都江堰住房和城乡建设厅网站哈尔滨网站建设方案维护
  • 九江网站网站建设原始传奇经典复古
  • 宽屏营销型网站源码安微省住房和城乡建设厅网站
  • 做暖视频网站免费搜索引擎营销的模式有
  • 网站建设需要的条件榆林北京网站建设
  • 分类信息网站推广的意义wordpress安装教程wamp
  • 免费自助建站全系统建设银行永泰支行网站
  • 建网络商城网站如何开公司做网站