Android界面刷新方法

Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用。

Android界面刷新方法有两种,分别是利用Handler和利用postInvalidate()来实现在线程中刷新界面。

利用Handler刷新界面

实例化一个Handler对象,并重写handleMessage方法调用invalidate()实现界面刷新;而在线程中通过sendMessage发送界面更新消息。

// 在onCreate()中开启线程
new Thread(new GameThread()).start();
// 实例化一个handler
Handler myHandler = new Handler() {
    //接收到消息后处理
    public void handleMessage(Message msg) {
        switch (msg.what) {
        case Activity01.REFRESH:
            mGameView.invalidate();//刷新界面
            break;
        }
        super.handleMessage(msg);
    }
};
class GameThread implements Runnable {
    public void run() {
        while (!Thread.currentThread().isInterrupted()) {
            Message message = new Message();
            message.what = Activity01.REFRESH;
            //发送消息
            Activity01.this.myHandler.sendMessage(message);
            try {
                Thread.sleep(100);
            }
            catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        }
    }
}

使用postInvalidate()刷新界面

使用postInvalidate则比较简单,不需要handler,直接在线程中调用postInvalidate即可。

class GameThread implements Runnable {
    public void run() {
        while (!Thread.currentThread().isInterrupted()) {
            try {
                Thread.sleep(100);
            }
            catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }

            // 使用postInvalidate可以直接在线程中更新界面
            mGameView.postInvalidate();
        }
    }
}
时间: 2024-11-02 23:31:55

Android界面刷新方法的相关文章

Android界面刷新

Android程序中可以使用的界面刷新方法有两种,分别是利用Invalidate和利用postInvalidate()来实现在线程中刷新界面. 1.利用Handler刷新界面: Invalidate不能直接在子线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用.实例化一个Handler对象,并重写handleMessage方法调用invalidate()实现界面刷新,而在子线程中通过sendMessage发送界面更新消息. // 在o

Android 界面刷新

Android的invalidate与postInvalidate都是用来刷新界面的,用法区别在于: 1) invalidate():实例化一个Handler对象,并重写handleMessage方法调用invalidate()实现界面刷新;而在线程中通过sendMessage发送界面更新消息. // 在onCreate()中开启线程 new Thread(new GameThread()).start(); // 实例化一个handler Handler myHandler = new Han

Android界面优化方法

我们在推出一款APP之后,中间出现了一些体验上的问题,一个明显的是界面卡顿,针对此问题我们采取了如下的一些措施,起到了一些效果. 1.优化界面层次 针对可以合并的界面层次进行合并,减少界面的渲染,这个过程中主要使用的工具是开发者设置显示过度渲染,红色的区域的必须要优化的地方. 2.减少界面刷新次数 减少界面刷新次数是很好的界面优化,尤其是针对ListView之类的集合型页面. [1]使用延时减少界面刷新次数:我们做了一个延时机制,每次刷新延迟1s进行,当在这一秒钟又有刷新请求的时候就继续推迟刷新

Android之界面刷新(invalidate和postInvalidate使用)

Android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用. Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用. Android程序中可以使用的界面刷新方法有两种,分别是利用Handler和利用postInvalidate()来实现在

android中刷新Invalidate和postInvalidate的区别

Android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用. Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用. Android程序中可以使用的界面刷新方法有两种,分别是利用Handler和利用postInvalidate()来实现在

android 单线程多任务断点排队下载(支持多界面刷新)

最近在做一个单线程多任务的断点排队下载的功能,网上确实有很多这样的demo.但是呢我发现大部分网上的demo都是很些不完整的要么就是有缺陷的,可能是我还没找到.今天我给大家带来的一个功能完整的并且可以多界面刷新,就比如:我当前界面点了下载放后台下载了,退出了当前界面在进来网上很多这样demo都没做继续更新界面.并且还做了排队. 首先我们先制定下计划: 1.我们做的是断点下载,断点下载肯定是需要记录当前下载的进度和文件总大小的.这个当然是放在数据库里面最好,当然肯定会是异步来操作数据库,这里我们就

android实现仿QQ界面刷新

android实现仿QQ界面刷新 转载请注明出处:http://blog.csdn.net/wangpengfei_p/article/details/51420422 昨天想要实现一个下拉刷新的效果,本来想应该比较简单,因为之前在慕课网看见过类似的实现,记得是在listView里面添加footView或是添加headView,监听手指的点击滑动事件来控制view的显示或是隐藏,但是自己按照上面的代码来实现之后发现.这样做有一点不好的地方: 它判断是否刷新的依据是判断listView是不是滑动到

Android postInvalidate()实现界面刷新

Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用. invalidate()是用来刷新View的,必须是在UI线程中进行工作.比如在修改某个view的显示时,调用invalidate()才能看到重新绘制的界面.invalidate()的调用是把之前的旧的view从主UI线程队列中pop掉. 一个Android 程序默认情况下也只有一个进程,但

实验4:掌握Android应用调试方法、添加新界面

第四章代码清单: Android应用调试方法 第五章代码清单: 添加新界面