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

国外服务器做网站德阳定制建站网站建设制作

国外服务器做网站,德阳定制建站网站建设制作,网站长尾词怎么做,长沙做网站企业目录 一#xff0c;Android中的多线程问题 1.模拟耗时工作 2.Android开启子线程 二#xff0c;在子线程中更新UI 1.异步消息处理机制 Handler 2.使用runOnUiThread更新UI 一#xff0c;Android中的多线程问题 Android用户界面是与用户交互的接口#xff0c;对于用户的…目录 一Android中的多线程问题 1.模拟耗时工作 2.Android开启子线程  二在子线程中更新UI 1.异步消息处理机制 Handler 2.使用runOnUiThread更新UI 一Android中的多线程问题 Android用户界面是与用户交互的接口对于用户的操作Android迅速响应用户输入200ms内是一个重要目标。因此一些耗时操作如后台下载异步加载图片等需要放在子线程中运行否则会导致主线程阻塞。 1.模拟耗时工作 例如下面这段访问百度界面的代码如果在主线程中运行的话就会出现android.os.Network-OnMainThreadException的报错也就是在主线程中请求了网络操作这是一种耗时操作。为了解决这个问题就需要把操作放在子线程中运行。 Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViews();setListeners(); } private void setListeners() {btn_baidu.setOnClickListener(new View.OnClickListener() {Overridepublic void onClick(View v) {try {//获取百度链接URL url new URL(https://www.baidu.com/);//获取输入流InputStream inputStream url.openStream();byte[] bytes new byte[1024];//存储输入的信息StringBuffer buffer new StringBuffer();while((inputStream.read(bytes)) ! -1){String str new String(bytes, 0, bytes.length);buffer.append(str);}Log.i(baidu, buffer.toString());//关闭流inputStream.close();} catch (MalformedURLException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}}}); } 2.Android开启子线程  在Android中开启线程的操作与在Java中一致继承Thread类或实现Runnable接口不了解的话可以阅读博客Java线程基础Thread Runnable 多线程 Synchronized 死锁...-CSDN博客。 例如下面用实现Runnable接口的方法来开启子线程访问百度 Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViews();setListeners(); } private void setListeners() {btn_baidu.setOnClickListener(new View.OnClickListener() {Overridepublic void onClick(View v) {new Thread(new Runnable() {Overridepublic void run() {try {//获取百度链接URL url new URL(https://www.baidu.com/);//获取输入流InputStream inputStream url.openStream();byte[] bytes new byte[1024];//存储输入的信息StringBuffer buffer new StringBuffer();while((inputStream.read(bytes)) ! -1){String str new String(bytes, 0, bytes.length);buffer.append(str);}//在子线程中更改Ui界面使用runOnUiThreadLog.i(baidu, buffer.toString());//关闭流inputStream.close();} catch (MalformedURLException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}}}).start();}}); } 运行并查看日志可以发现成功访问  二在子线程中更新UI 使用子线程解决异步执行又会带来新问题那就是在Android中只有UI线程也叫主线程可以更新UI界面子线程不能更新。为了在子线程中更新UI我们需要使用Android异步消息处理机制。 1.异步消息处理机制 Handler Android中的异步消息处理主要由4个部分组成MessageHandlerMessageQueueLooper。 Message在线程之间传递的消息Message中可以封装一些数据如whatint型表示Message的编号obj封装的Object对象此外还有int型的arg1arg2等Handler用于在线程间发送和处理消息发送消息使用sendMessage方法处理消息使用handleMessage方法MessageQueue消息队列用于存放Handler发送的消息这些消息直到被处理前会一直存放在消息队列中。每个线程只会有一个MessageQueue对象LooperLooper是每个线程中MessageQueue的管家调用Looper的loop方法后会进入无限循环每当发现MessageQueue中存在一条消息就会将其取出并传递到Handler的handleMessage方法中每个线程只会有一个Looper对象  异步消息处理机制的基本流程为 1首先在主线程中创建一个Handler对象并重写handleMessage方法。 2当子线程需要更改UI时就创建一个Message对象并通过Handler将Message发送出去Message消息会被添加到MessageQueue中等待处理Looper会一直尝试从消息队列中取出消息并传给Handler的handleMessage方法。 3Handler的构造器中我们传入了Looper.getMainLooper所以handleMessage方法中的代码会在UI线程中运行我们就可以放心地进行UI操作。 下面是代码实例获取网络图片 private void getImg() {//1.在主线程中创建一个Handler对象并重写handleMessage方法。Handler handler new Handler(Looper.getMainLooper()){Overridepublic void handleMessage(NonNull Message msg) {switch (msg.what){case 114514:Bitmap bitmap (Bitmap) msg.obj;iv_img.setImageBitmap(bitmap);Log.i(114514, 获取图片成功);break;}}};//设置监听btn_getimg.setOnClickListener(new View.OnClickListener() {Overridepublic void onClick(View v) {new Thread(new Runnable() {Overridepublic void run() {try {//2.当子线程需要更改UI时就创建一个Message对象URL url new URL(https://profile-avatar.csdnimg.cn/8e4c56733fdd4dda90854384976d4bb0_ih_lzh.jpg!1);InputStream inputStream url.openStream();Bitmap bitmap BitmapFactory.decodeStream(inputStream);Message msg handler.obtainMessage();//封装bitmap对象和设置对象编号msg.obj bitmap;msg.what 114514;//3.通过Handler将Message发送出去handler.sendMessage(msg);inputStream.close();} catch (MalformedURLException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}}}).start();}}); } 2.使用runOnUiThread更新UI runOnUiThread在UI线程上运行指定的操作。如果当前线程是UI线程则执行操作如果当前线程不是UI线程操作将被提交到UI线程的消息队列MessageQueue中。runOnUiThread只能在Activity中使用。 public final void runOnUiThread(Runnable action) {if (Thread.currentThread() ! mUiThread) {mHandler.post(action);//提交到消息队列} else {action.run();//操作执行}} 还是上面获取图片的例子将Handler改为使用runOnUiThread更改UI private void getImg() {//设置监听btn_getimg.setOnClickListener(new View.OnClickListener() {Overridepublic void onClick(View v) {new Thread(new Runnable() {Overridepublic void run() {try {URL url new URL(https://profile-avatar.csdnimg.cn/8e4c56733fdd4dda90854384976d4bb0_ih_lzh.jpg!1);InputStream inputStream url.openStream();Bitmap bitmap BitmapFactory.decodeStream(inputStream);runOnUiThread(new Runnable() {Overridepublic void run() {iv_img.setImageBitmap(bitmap);}});} catch (MalformedURLException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}}}).start();}}); }
http://www.hkea.cn/news/14392285/

相关文章:

  • 锚文本外链网站找人做一个网站多少钱
  • 做网站一个月能挣多少钱网站页眉尺寸
  • 辽阳网站建设58网站页面框架设计
  • 做网页的网站素材wordpress搭建子网站
  • 网站备案有时间吗网络服务商英文简称
  • 游仙建设局官方网站做百度微信小程序都有哪些网站
  • 快递网站怎么做的延安做网站的公司电话
  • 网站建设及推广枣强知乎营销软件
  • 如何建立网站做微商xunsearch做搜索网站
  • 肥东建设局网站网站模板如何使用 如何修改吗
  • 跨境电商 网站开发邮件格式模板
  • 视频网站开发分析深圳华强北今晚
  • 商城网站模版网络运营工资大概多少
  • .net网站开发工程师太仓有专门做网站的地方吗
  • 深圳建设商城网站福田蒙派克油耗
  • 做类似于彩票的网站犯法吗用dw做网站怎么上传到网站上
  • 网站的关键词在哪里设置鞍山网站建设找金航
  • 做团购网站怎样赚钱北京梵客装饰
  • 太原要做网站的公司网站回头率
  • 兰州做网站维护的公司网站 一级域名 二级域名
  • 响应式企业网站开发所用的平台不花钱网站怎么做推广
  • 外贸个人网站网站开发流程比较合理
  • 网站的连接二维码怎么做dw网页制作教程主页子页
  • 电商网站建设费用公司宣传网站
  • 宜宾营销型网站建设手机微网站制作系统
  • 宁波网站推广外包服务WordPress文章id连号
  • 建设路街道办事处门户网站深圳企业500强
  • 禅城区建网站公司广西哪家公司做网站的
  • 网站开发技术文档包含网站设计与开发实验报告
  • 怎么建立公司网站费用wordpress首页手机版