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);
}
}
}
分享到:
相关推荐
* 创建一个Handler对象,使用Handler对象h把Runnable的对象r压入队列 * 此时只会会执行Run()方法,但是不会开启新的线程 */ //Handler h = new Handler(); //h.post(r); /* * 在java中真正开启...
实现定时器有很多种方式,在这里我简单的介绍几种方式 (1)使用Handler + Runnable的方式 代码如下: Handler handler = new Handler(); Runnable runnable = new Runnable() {... 然后调用handler.post(runnable);就能启
通过看源码发现,post这个方法是把任务r转成一个message放进了handler所在的线程中的messageQueue消息队列中,并且是立刻发送的消息,这样它既不是异步的也不是延时的,所以问题来了: 1. 它和sendMessage()有什么...
主要介绍了详解Android使用Handler造成内存泄露的分析及解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
在主线程即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.post(myThread); //使用匿名内部类创建一个线程myThreadRunnable mythread = new Runnable() {public void run() {}};一开始,相信很多人都以为myThread中的run()方法会在一个新的线程中运行,但事实并非...
handler.post(Runnable) runnable是如何执行的?(字节跳动、小米) Looper无限循环为啥没有ANR(B站) Looper、handler、线程间的关系。例如一个线程可以有几个Looper可以对应几个Handler?(字节跳动、小米)
Handler.post(Runnable) Activity.runOnUIThread(Runnable) View.post(Runnable) AsyncTask 布局的优化 HierarchyViewer查看Layout层次 标签重用一些比较复杂的组件 标签减少层次,避免嵌套过深的情况发生 使用...
handler.post(Runnable) runnable是如何执行的?(字节跳动、小米) Looper无限循环为啥没有ANR(B站) Looper、handler、线程间的关系。例如一个线程可以有几个Looper可以对应几个Handler?(字节跳动、小米) 如何...
handler.post(Runnable) runnable是如何执行的?(字节跳动、小米) Looper无限循环为啥没有ANR(B站) Looper、handler、线程间的关系。例如一个线程可以有几个Looper可以对应几个Handler?(字节跳动、小米) 如何...
但是,从 Android 7.0(Api level 24) 开始,View.post() 将不再那么靠谱了,你 post() 出去的 Runnable ,可能永远也不会有机会执行到。 二、post 在 7.0 的差异 2.1 post 方法的差异 前面提到,这个问题只出现在 ...
[Android实例] 【版主帖推荐...handler.post(Runnable) runnable是如何执行的?(字节跳动、小米) Looper无限循环为啥没有ANR(B站) Looper、handler、线程间的关系。例如一个线程可以有几个Looper可以对应几个Handle
(1)Activity.runOnUiThread(Runnable) (2)View.post(Runnable) (3)View.postDelayed(Runnable,long) (4)Handler (5)AsyncTask在此说明Handler 使用规则####★Outline执行绪间通讯(如:worker执行绪将UI更新程式片段...
new Handler().post(new Runnable() { @Override public void run() { layout.setBackgroundDrawable(friendContext.getResources().getDrawable(R.drawable.bg)); } }); } );
handler.post(r)其实这样并不会新起线程,只是执行的runnable里的run()方法,却没有执行start()方法,所以runnable走的还是UI线程。 1.如果像这样,是可以操作ui,但是run还是走在主线程,见打印出来的Log线程名字是...
,这个题目有点意思,对于很多人来说,可能对Thread和Handler很熟悉,主要涉及到Android的消息机制(Handler、Message、Looper、MessageQueue),详见《 从Handler.post(Runnable r)再一次梳理Android的消息机制(以及...
handler.post(Runnable) runnable是如何执行的?(字节跳动、小米) Looper无限循环为啥没有ANR(B站) Looper、handler、线程间的关系。例如一个线程可以有几个Looper可以对应几个Handler?(字节跳动、
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); } ...