`

android handler.post(Runnable)

阅读更多

package com.android;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;

public class TestActivity extends Activity {
 private MyView myView;
 private Handler mHandler;

 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  myView = new MyView(this);
  // 创建一个Handler
  mHandler = new Handler();
  // 调用Handler.post(Runnable r)方法
  mHandler.post(new Runnable() {

//   mHandler.post(Runnable) 中的Runnable 会在mHandler 所在的线程执行, 也就是View 所在的UI线程
//   handler并没有新开一个线程啊 只是把runnable放进去而已
//   这样就可以跟handler都在主线程中 然后就可以更新ui了
//   while是保证隔一定时间就放一个runnable进入

//   我们可以通过调用handler的post方法,
//   把Runnable对象(一般是Runnable的子类)传过去;
//   handler会在looper中调用这个Runnable的Run方法执行。
//   Runnable没有启动(线程的启动是用start()来启动的)

   public void run() {
    // 直接调用View.invalidate(),更新组件
    myView.invalidate();
    // 延迟5毫秒后执行线程
    mHandler.postDelayed(this, 5);
   }
  });
  setContentView(myView);
 }

 class MyView extends View {
  private float x = 0f;

  public MyView(Context context) {
   super(context);
  }

  protected void onDraw(Canvas canvas) {
   super.onDraw(canvas);
   x += 1;
   Paint mPaint = new Paint();
   mPaint.setColor(Color.BLUE);
   canvas.drawRect(x, 40, x + 40, 80, mPaint);
  }
 }
}

分享到:
评论

相关推荐

    Android:Handler的post()方法和Thread的start()方法执行Thread的run()方法的区别

    * 创建一个Handler对象,使用Handler对象h把Runnable的对象r压入队列 * 此时只会会执行Run()方法,但是不会开启新的线程 */ //Handler h = new Handler(); //h.post(r); /* * 在java中真正开启...

    Android定时器实现的几种方式整理及removeCallbacks失效问题解决

    实现定时器有很多种方式,在这里我简单的介绍几种方式 (1)使用Handler + Runnable的方式 代码如下: Handler handler = new Handler(); Runnable runnable = new Runnable() {... 然后调用handler.post(runnable);就能启

    android handler.post和handler.sendMessage的区别和联系

    通过看源码发现,post这个方法是把任务r转成一个message放进了handler所在的线程中的messageQueue消息队列中,并且是立刻发送的消息,这样它既不是异步的也不是延时的,所以问题来了: 1. 它和sendMessage()有什么...

    详解Android使用Handler造成内存泄露的分析及解决方法

    主要介绍了详解Android使用Handler造成内存泄露的分析及解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Android Handler Looper Message 使用示例

    在主线程即UI线程外,新建一个Looper线程,并用Messenger和Handler来处理message和posted runnable。程序中,在负线程中默认加了一个3s的线程等来,来帮助理解sent message和post runnable之间的同步机制。所以在按...

    画闪烁移动小球

    画闪烁移动小球,当小球碰撞到边缘时弹起. ... handler.post(new Runnable() { @Override public void run() { dtest.invalidate(); handler.postDelayed(this, 50); } }); } }

    Handler与Android多线程详解

    handler.post(myThread); //使用匿名内部类创建一个线程myThreadRunnable mythread = new Runnable() {public void run() {}};一开始,相信很多人都以为myThread中的run()方法会在一个新的线程中运行,但事实并非...

    [Android实例] Android 竖着的SeekBar.zip

    handler.post(Runnable) runnable是如何执行的?(字节跳动、小米) Looper无限循环为啥没有ANR(B站) Looper、handler、线程间的关系。例如一个线程可以有几个Looper可以对应几个Handler?(字节跳动、小米)

    word源码java-Android-Interview-Gathered:Android-面试-集结

    Handler.post(Runnable) Activity.runOnUIThread(Runnable) View.post(Runnable) AsyncTask 布局的优化 HierarchyViewer查看Layout层次 标签重用一些比较复杂的组件 标签减少层次,避免嵌套过深的情况发生 使用...

    [Android实例] 面试题集.zip

    handler.post(Runnable) runnable是如何执行的?(字节跳动、小米) Looper无限循环为啥没有ANR(B站) Looper、handler、线程间的关系。例如一个线程可以有几个Looper可以对应几个Handler?(字节跳动、小米) 如何...

    [安卓开源项目]Android-炫酷的3D音乐播放器-各种特效OpenGL.zip

    handler.post(Runnable) runnable是如何执行的?(字节跳动、小米) Looper无限循环为啥没有ANR(B站) Looper、handler、线程间的关系。例如一个线程可以有几个Looper可以对应几个Handler?(字节跳动、小米) 如何...

    View.post() 不靠谱的地方你知道多少

    但是,从 Android 7.0(Api level 24) 开始,View.post() 将不再那么靠谱了,你 post() 出去的 Runnable ,可能永远也不会有机会执行到。 二、post 在 7.0 的差异 2.1 post 方法的差异 前面提到,这个问题只出现在 ...

    [Android实例] 【版主帖推荐】继人员列表,聊天的实现,包括图片,语音.zip

    [Android实例] 【版主帖推荐...handler.post(Runnable) runnable是如何执行的?(字节跳动、小米) Looper无限循环为啥没有ANR(B站) Looper、handler、线程间的关系。例如一个线程可以有几个Looper可以对应几个Handle

    Android_Studio_Handler:Android Handler 执行绪教学

    (1)Activity.runOnUiThread(Runnable) (2)View.post(Runnable) (3)View.postDelayed(Runnable,long) (4)Handler (5)AsyncTask在此说明Handler 使用规则####★Outline执行绪间通讯(如:worker执行绪将UI更新程式片段...

    Android 简单换肤实例.rar

      new Handler().post(new Runnable() {   @Override   public void run() {   layout.setBackgroundDrawable(friendContext.getResources().getDrawable(R.drawable.bg));   }   });  }  );

    Android 多线程处理之多线程详解

    handler.post(r)其实这样并不会新起线程,只是执行的runnable里的run()方法,却没有执行start()方法,所以runnable走的还是UI线程。 1.如果像这样,是可以操作ui,但是run还是走在主线程,见打印出来的Log线程名字是...

    Thread、Handler和HandlerThread关系详解

    ,这个题目有点意思,对于很多人来说,可能对Thread和Handler很熟悉,主要涉及到Android的消息机制(Handler、Message、Looper、MessageQueue),详见《 从Handler.post(Runnable r)再一次梳理Android的消息机制(以及...

    Andorid项目源码(168套).zip

    handler.post(Runnable) runnable是如何执行的?(字节跳动、小米) Looper无限循环为啥没有ANR(B站) Looper、handler、线程间的关系。例如一个线程可以有几个Looper可以对应几个Handler?(字节跳动、

    Andorid项目源码|(精华)新浪微博图片缓冲技术

    handler.post(Runnable) runnable是如何执行的?(字节跳动、小米) Looper无限循环为啥没有ANR(B站) Looper、handler、线程间的关系。例如一个线程可以有几个Looper可以对应几个Handler?(字节跳动、小米) 如何...

    目录选择器源代码

    目录选择器源代码 chooserdialog.xml ? 1 2 3 4 5 6 ...<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width=... handler.post(add); } ...

Global site tag (gtag.js) - Google Analytics