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

企业网站提交成立公司后需要做的事情

企业网站提交,成立公司后需要做的事情,金坛建设局招标网站,php网站怎么做静态化上一篇#xff1a; IntentService 深度解析 上一篇我们从源码中看到IntentService内部的线程机制#xff0c;是采用HandlerThread来实现的#xff0c;这里我们就来深度解析下HandlerThread。推荐先看一下Handler机制详解#xff08;实例 源码#xff09; 先看个源码吧…上一篇 IntentService 深度解析 上一篇我们从源码中看到IntentService内部的线程机制是采用HandlerThread来实现的这里我们就来深度解析下HandlerThread。推荐先看一下Handler机制详解实例 源码 先看个源码吧毕竟很简单 Handler是用于线程通讯的。HadndlerThread 是带Handler的子线程。 我们一般是子线程往主线程发消息例如更新UI进度之类的。可以直接在主线程new Handler()。一些特殊情况下主线程需要往子线程发消息需要在子线程创建Looper、Handler对象用于接收处理消息 HandlerThread源码 name指定线程名字 priority代表优先级。优先级范围为-20到19默认为0优先级越高获得的CPU资源更多反之则越少。-20代表优先级最高反之19最低。注意使用的是 android.os.Process 而不是 java.lang.Thread 的优先级 onLooperPrepared() 可以做一些初始化工作在Looper.loop()之前调用 HandlerThread用于和子线程进行通讯 普通线程调用start()虚拟机会切换线程执行run()方法 HandlerThread在子线程中创建Looper、MessageQueue、Handler对象通过这个handler给子线程发送消息子线程接收到能做出相应处理 在run()方法中也就是子线程中 Looper.prepare()创建一个子线程的looper对象、MessageQueue对象 Looper.loop()遍历取出消息进行执行 提供getLooper()方法如果线程存活且mLooper不为空则返回Looper对象可能mLooper创建需要一定时间 提供getThreadHandler()方法返回一个指定looper对象的handler对象也就是处于子线程中handler对象 提供quit()、quitSafely()方法用于退出looper public class HandlerThread extends Thread {int mPriority;int mTid -1;Looper mLooper;private Nullable Handler mHandler;public HandlerThread(String name) {super(name);mPriority Process.THREAD_PRIORITY_DEFAULT;}//指定线程的优先级注意使用的是 android.os.Process 而不是 java.lang.Thread 的优先级public HandlerThread(String name, int priority) {super(name);mPriority priority;}//子类可以重写在这里做一些执行前的初始化工作protected void onLooperPrepared() {}Overridepublic void run() { //当调用thread.start()后会执行run方法mTid Process.myTid();Looper.prepare();synchronized (this) {mLooper Looper.myLooper();notifyAll(); //Looper 已经创建唤醒等待获取 Looper 的线程}Process.setThreadPriority(mPriority);onLooperPrepared();Looper.loop();mTid -1;}//获取当前线程的 Looper如果线程尚未启动或者已经dead就返回 null//如果线程已经启动但Looper 还没初始化完成这个方法会阻塞直到looper已经准备好并返回Looper对象public Looper getLooper() {if (!isAlive()) {return null;}synchronized (this) {while (isAlive() mLooper null) { //循环等待直到mLooper ! nulltry {wait();} catch (InterruptedException e) {}}}return mLooper;}NonNullpublic Handler getThreadHandler() {if (mHandler null) {mHandler new Handler(getLooper());}return mHandler;}public boolean quit() {Looper looper getLooper();if (looper ! null) {looper.quit();return true;}return false;}public boolean quitSafely() {Looper looper getLooper();if (looper ! null) {looper.quitSafely();return true;}return false;}public int getThreadId() {return mTid;} } 实例讲解 这里只是为了实现方便可能会存在内存泄露问题。 大致场景是 1、主线程叫子线程去做事 定义一个子线程的Handler就是threadHandler啦threadHandler.sendMessage 2、子线程执行完毕通知主线程 threadhandler.handleMessage处理耗时任务 3、主线程收到消息更新UI或者其它的 public class HandlerThreadActivity extends AppCompatActivity {private Button downloadBtn;private TextView displayTv;private int count 1;//UI线程的Handler,可以更新UIprivate Handler mUIHandler new Handler(new Handler.Callback() {Overridepublic boolean handleMessage(Message msg) {Log.e(zhen, 主线程Handle收到任务 msg.what 的反馈很满意 thread: Thread.currentThread().getId());displayTv.setText(主线程Handle收到消息 msg.what);return true;}}) ;private HandlerThread mHandlerThread; //创建一个带Looper的线程private Handler mHandler; //以子线程的Looper为入参创建一个子线程的HandlerOverrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_handler_thread);initView();intHandler();}private void intHandler() {mHandlerThread new HandlerThread(zhen);mHandlerThread.start(); //必须要HandlerThread.start之后才能创建Handler,不然Looper.mQueue为空mHandler new Handler(mHandlerThread.getLooper()){Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);Log.e(zhen,子线程里handle收到任务 msg.what 并开始处理 threadId: Thread.currentThread().getId());try {int progress 0;do{Thread.sleep(2000); //mHandler的handleMessage是在子线程中执行的progress 20;Log.d(zhen,子线程工作进度 progress % ....);} while (progress 100);Log.e(zhen,子线程任务 msg.what 执行完通知UI线程 threadId: Thread.currentThread().getId());mUIHandler.sendEmptyMessage(msg.what);} catch (InterruptedException e) {e.printStackTrace();}}};}private void initView() {downloadBtn findViewById(R.id.downloadBtn);displayTv findViewById(R.id.displayTv);downloadBtn.setOnClickListener(new View.OnClickListener() {Overridepublic void onClick(View v) {mHandler.sendEmptyMessage(count);Log.e(zhen,主线程给子线程handle发出任务 count 开始工作啦 threadId: Thread.currentThread().getId());count;}});}Overrideprotected void onDestroy() {super.onDestroy();mHandlerThread.quit();} }1、点击downloadBtn一次 2、点击downloadBtn两次 是不是很类似IntentService的效果在子线程中顺序执行因为是一次执行完一个msg再去执行下一个msg啦 另外是不是感觉这日志有3D效果看的眼睛疼。
http://www.w-s-a.com/news/637792/

相关文章:

  • 高校网站群管理系统凡科建站是永久的吗
  • 深圳网站建设服务电话网站通栏设计素材
  • 网站里面的视频功能怎么做网站名注册
  • 网站游戏下载厦门php网站建设
  • 沈阳关键词网站排名一台服务器做两个网站吗
  • 哪个行业该做网站但是没有做dom手表官方网站
  • 网站建设费 大创wordpress中函数get
  • 怎样建设个自己的网站首页有没有专门教做扯面的网站
  • 网站后台怎么添加模板教育类网站开发公司
  • 网站的外链是什么php创建一个网站
  • 语文建设 官方网站网络工程可以从事什么工作
  • 无锡便宜做网站如何下载网站模板
  • 南宁高端网站网络小说网站推广策划方案
  • 苏州网站制作方法建设银行 网站
  • 技术网站推广范例素材网站哪个好
  • 网站找人做的他能登管理员吗网站建设一般多少钱
  • 衡水哪有做网站的wordpress主题站主题
  • 网络建设的流程网站公司注册资本
  • 杭州旅游团购网站建设建立一个网站需要哪些步骤
  • 实木餐桌椅网站建设浦东网站建设哪家好
  • 高端手机网站定制网站网络推广推广
  • 做网站的颜色大学网站群建设方案
  • 淄博学校网站建设哪家好网站集约化建设规范
  • 专业论坛网站有哪些如何制作h5页面视频
  • 南京整站优化网站备案负责人一定要法人
  • 北京正规网站建设公司php网站开发实训感想
  • 织梦网站地图怎么做腾讯网站开发语言
  • 站长之家alexa排名wordpress html 标签
  • WordPress建站主机推荐工程公司的经营范围
  • 做网站要注意哪一点网站需求分析的重要