为了账号安全,请及时绑定邮箱和手机立即绑定

Android面试常客Handler详解

难度中级
时长 2小时 0分
学习人数
综合评分9.30
169人评价 查看评价
9.7 内容实用
9.3 简洁易懂
8.9 逻辑清晰
  • ThreadLocal是什么 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。 ThreadLocal很容易让人望文生义,想当然地认为是一个“本地线程”。其实,ThreadLocal并不是一个Thread,而是Thread的局部变量,也许把它命名为ThreadLocalVariable更容易让人理解一些。 当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。 从线程的角度看,目标变量就象是线程的本地变量,这也是类名中“Local”所要表达的意思。
    查看全部
  • 在非ui线程中如果让线程休眠,那么就不能更新ui,如果不让线程休眠,又可以更新ui,原因我们可以从源码的角度去观察,但是不建议使用,最好还是通过使用handler的机制来实现对ui的更新
    查看全部
  • 更新ui的四种方法: 第一种: private void handle1(){ handler.post(new Runnbale(){ public void run(){ textView.setText("ok"); } }); } 第二种:直接在子线程中使用sendMessage,在创建handler对象的时候,在其中的handleMessage方法中去更新ui private void handler2(){ handler.sendEmptyMessage(1); } 第三种: private void handler3(){ runOnUiThread(new Runnable(){ public void run(){ textView.setText("ok"); } }) } 第四种: private void viewUi(){ textView.post(new Runnable(){ public void run(){ textView.setText("ok"); } }) }
    查看全部
  • 重点: handler负责发送消息,Looper负责接收handler发送的消息,并直接把消息回传给handler自己,MessageQueue就是一个存储消息的容器
    查看全部
  • google为什么只设计了handler来解决更新ui的问题? 最根本的目的就是解决多线程并发问题,假设如果在一个Activity当中,有多个线程去更新ui,并且都没有加锁机制,那么就会出现更新界面错乱,但是如果都进行加锁处理的话,又会导致性能下降 因此,产生了这种handler的更新机制,根本不用去关心多线程的问题,所有的更新ui的操作,都是在主线程的消息队列当中去轮询处理的
    查看全部
  • 通过 handler来实现sendMessage的方法的步骤: 1.创建一个handler的对象,并在其中重写handlerMessage的方法,并在其中更新ui private Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { extView.setText("" + msg.arg1);};}; 2.创建一个Thread类,在其中的run()方法中初始化一个message,并为message来赋值,并调用handler的sendMessage的方法 new Thread() { public void run() { try { Thread.sleep(2000); Message message = new Message(); message.arg1 = 88; handler.sendMessage(message); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }; 这样,执行这个线程的时候就会通过sendMessage的方法将message参数传递过去,并在上面的初始化handler的时候接受到参数,并实现更新ui
    查看全部
  • 通过handler来实现图片定时轮播的代码: public class MainActivity extends Activity { private Handler handler = new Handler(); private ImageView imageView; // 将我们保存在文件夹中的三张图片进行了实例化 private int[] images = { R.drawable.image1, R.drawable.image2, R.drawable.image3 }; // 创建的下标,用来实现当前是哪张图片显示 private int index; // 创建了一个我们自己写的Runnable的对象 private MyRunnable myRunnbale = new MyRunnable(); class MyRunnable implements Runnable { @Override public void run() { // TODO Auto-generated method stub index++; index = index % 3; imageView.setImageResource(images[index]); // 通过handler的postDelayed的方法,进行定时的执行run方法中的代码 handler.postDelayed(myRunnbale, 1000); } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.textView1); imageView = (ImageView) findViewById(R.id.imageView1); // 在主线程中执行上面的操作 handler.postDelayed(myRunnbale, 1000); } }
    查看全部
  • handler的四种使用的方法: sendMessage sendMessageDelayed post(Runnable) postDelayed(Runnable,long)
    查看全部
  • new Thread() { public void run() { try { Thread.sleep(1000); handler.post(new Runnable() { @Override public void run() { // TODO Auto-generated method stub // 更新文本信息 // 此时直接在这里更新ui的时候,程序将会直接崩溃掉 textView.setText("更新了"); } }); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }; }.start(); 从上面的方法中我们可以知道,如果想直接更新ui,我们需要在Thread的run方法中通过 handler.post()的方法来实现,而post方法中的参数是一个new Runnable(){public void run(){} ,然后我们在这个run方法中去更新ui,这才是正确的方法
    查看全部
  • 说明:如果我们直接在一个Activity中new一个Thread,并在其中的run方法中去更新ui,那么此时这个程序是会直接崩溃掉的,也就是说,我们不能直接在非ui线程中去更新ui,需要使用到Handler的机制才能实现我们的效果:
    查看全部
  • 为什么需要使用handler: Android在设计的时候,就封装了一套消息创建,传递,处理机制,如果不遵循这样的机制的话,就没有办法更新ui信息,也就是不使用handler会抛出异常消息
    查看全部
    0 采集 收起 来源:Handler是什么

    2016-02-02

  • 什么是handler: handler是android给我们提供用来更新UI的一套机制,也是一套消息处理的机制,我们可以发送消息,也可以通过它来处理消息
    查看全部
    0 采集 收起 来源:Handler是什么

    2016-02-02

  • handler 负责发送消息, looper负责接收handler发送的消息,并直接把消息回传给handler自己。MessageQueue就是一个存储消息的容器
    查看全部
  • handler是android给我们提供用来更新UI的一套机制,也是一套消息处理的机制,我们可以发送消息,也可以通过它处理消息
    查看全部
    0 采集 收起 来源:Handler是什么

    2016-01-31

  • 为什么要用handler?
    查看全部
    0 采集 收起 来源:Handler是什么

    2016-01-30

举报

0/150
提交
取消
老师告诉你能学到什么?
通过本课程,你将学到: 1、什么是Handler 2、如何使用Handler 3、Handler的原理是什么 4、如何定义一个与线程相关的Handler 5、Android更新UI的几种方式 6、非UI线程真的不能更新UI吗 7、Handler使用过程中遇到的问题

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!