`
zkl_1987
  • 浏览: 243439 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

android 笔记 --- 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();
                     }
              }
       }





分享到:
评论

相关推荐

    Android-Jetpack笔记-DataBinding

    通常在开发界面时,总有findViewById的重复工作,DataBinding可以免去这些操作。同时,DataBinding还可以直接在xml中绑定数据,免去类似setText的操作,让数据来驱动UI刷新。 Jetpack笔记代码 使用 在app/build....

    android studio 高级UI界面学习笔记(第一版)持续更新.md

    滑动菜单 下拉刷新 ExpandableListView适配器配置及使用

    安卓毕业设计加源码-Parking-Services-based-on-Android-Door:停车场信息服务平台(Android停车场门禁

    安卓毕业设计加源码 Parking-Services-based-on-...系统设计文档与源程序的编写方法应符合国家、行业标准。 答辩通过 项目基本完成,停车端略微简陋,可以添加更多新功能 车位管理界面 车牌识别 把刷新改成socket

    Android笔记之:App列表之下拉刷新的使用

    Android的ListView是应用最广的一个组件,功能强大,扩展性灵活(不局限于ListView本身一个类),前面的文章有介绍分组,拖拽,3D立体,游标,圆角,而今天我们要介绍的是另外一个扩展ListView:下拉刷新的ListView。...

    Android笔记之:onConfigurationChanged详解

    本篇是对Android中onConfigurationChanged的使用进行了详细的分析介绍。需要的朋友参考下

    Google《Android性能优化》学习笔记(上)

    Google近期在Udacity上发布了Android性能优化的在线课程,分别从渲染,运算与内存,电量几个方面介绍了如何去优化性能,这些课程是Google之前在Youtube上发布的Android性能优化典范专题课程的细化与补充。...

    Android开发技巧总汇(个人总结)

    5.Android 界面刷新 16 6.Cursor 17 7.Activity透明 20 9.发送短信 20 10.发送彩信 20 11.注册一个BroadcastReceiver 21 12.定义ContentObserver,监听某个数据表 21 13.获得手机UA 21 14.清空手机cookies ...

    任意Android手机都能和PC无线投屏.pdf

    "Android 手机与 PC 无线投屏技术" Android 手机与 PC 无线投屏技术是近年来备受关注的一项技术,特别是在华为荣耀手机和小米手机推出多屏协同功能后,其他品牌手机用户也希望能实现类似的操作。实际上,Windows 10...

    OfficeSuite Premium 10.4.18597.apk

    •从熟悉的桌面式界面查看,创建和编辑复杂的办公文档 •完全兼容Microsoft格式,包括DOC,DOCX,DOCM,XLS,XLSX,XLSM,PPT,PPTX,PPS,PPSX,PPTM,PPSM •支持PDF文件,包括PDF相机扫描和导出为PDF。 •对RTF...

Global site tag (gtag.js) - Google Analytics