android view 的刷新方式
来源:互联网 发布:大战神进阶数据 编辑:程序博客网 时间:2024/05/22 01:42
Android中对View的更新有很多种方式,使用时要区分不同的应用场合。我感觉最要紧的是分清:多线程和双缓冲的使用情况。
1.不使用多线程和双缓冲
这种情况最简单了,一般只是希望在View发生改变时对UI进行重绘。你只需在Activity中显式地调用View对象中的invalidate()方法即可。系统会自动调用View的onDraw()方法。
2.使用多线程和不使用双缓冲
这种情况需要开启新的线程,新开的线程就不好访问View对象了。强行访问的话会报:android.view.ViewRoot$CalledFromWrongThreadException:Onlythe original thread that created a view hierarchy can touch itsviews.
这时候你需要创建一个继承了android.os.Handler的子类,并重写handleMessage(Messagemsg)方法。android.os.Handler是能发送和处理消息的,你需要在Activity中发出更新UI的消息,然后再你的Handler(可以使用匿名内部类)中处理消息(因为匿名内部类可以访问父类变量,你可以直接调用View对象中的invalidate()方法)。也就是说:在新线程创建并发送一个Message,然后再主线程中捕获、处理该消息。
3.使用多线程和双缓冲
Android中SurfaceView是View的子类,她同时也实现了双缓冲。你可以定义一个她的子类并实现SurfaceHolder.Callback接口。由于实现SurfaceHolder.Callback接口,新线程就不需要android.os.Handler帮忙了。SurfaceHolder中lockCanvas()方法可以锁定画布,绘制玩新的图像后调用unlockCanvasAndPost(canvas)解锁(显示),还是比较方便得。
。invalidate()函数重绘当调用线程处于空闲状态时,会调用onDraw,刷新界面,也就是说,该函数仅是标记当前界面过期,并不直接负责刷新界面()
1.不使用多线程和双缓冲
2.使用多线程和不使用双缓冲
3.使用多线程和双缓冲
。invalidate()函数重绘当调用线程处于空闲状态时,会调用onDraw,刷新界面,也就是说,该函数仅是标记当前界面过期,并不直接负责刷新界面()
0 0
- android view 的刷新方式
- Android View 的刷新机制
- Android View 的刷新机制
- Android View的刷新机制
- android自定义view的刷新
- Android-View 的刷新机制
- Android View的刷新机制
- android View的刷新机制
- android中View的实时刷新
- Android中UI(View)的刷新
- android中View的实时刷新
- android中view界面的刷新
- Android的简单图形和view刷新
- Android中UI(View)的刷新
- Android中UI(View)的刷新
- Android中UI(View)的刷新
- Android中UI(View)的刷新
- Android中UI(View)的刷新
- Tomcat环境搭建
- 学会透过现象看本质,即使现象有时…
- ActivityGroup与TabHost的区别
- JSON解析
- SQLite数据库详解
- android view 的刷新方式
- Android Intent的几种用法全面总结
- 对Android开发者有益的40条优化建…
- 叶正盛:再次写给我们这些浮躁的程…
- onkeydown事件
- Android中的长度单位详解(dp、sp…
- Fragment与Activity
- 观察者模式
- JDK环境变量配置和android环境变量配置