android 中实时显示

使用handler 实时更新。

Handler为android系统的线程通信工具,承担着主线程与分线程,分线程之间的通信功能,经常用到的有post(),sendMessage() 方法,前者是将一个线程加入线程队列,后者是发送一个消息到消息队列中,post方法还有两个变种,分别为定时发送postAtTime()和延时发送postDelayed()。

计时功能的实现主要利用了postDelayed()函数,即在run函数中以一秒为延时,不断调用自身,直到外部结束线程。

  1. public class HandlerDemoActivity extends Activity {   
  2.     /** Called when the activity is first created. */  
  3.     Count count;   
  4.     int i = 0;   
  5.     @Override  
  6.     public void onCreate(Bundle savedInstanceState) {   
  7.         super.onCreate(savedInstanceState);   
  8.         setContentView(R.layout.main);   
  9.         count = new Count();   
  10.         handler.post(count);   
  11.     }   
  12.     class Count implements Runnable{   
  13.             @Override  
  14.             public void run() {   
  15.                 Log.i("count",String.valueOf(i++));   
  16.                 handler.postDelayed(count, 1000);   
  17.             }   
  18.     };   
  19.        
  20.     final Handler handler = new Handler(){   
  21.         @Override  
  22.         public void handleMessage(Message msg) {   
  23.             super.handleMessage(msg);   
  24.         }   
  25.     };   
  26. }  

 

static Handler mHandler = new Handler();

mHandler.post(mRunnable);  //使用handler将runnable线程加入到线程队列。

 static String str ="0.0 MB/s";  要实时显示的内容。 在主线程中改变要显示的内容,在另一个runnable线程中把这个要显示的内容刷新。

使用handler在线程运行中

  private Runnable mRunnable = new Runnable() { 
      public void run() { 
          text.setText(str);比如说从网上获取一个网页,在一个TextView中将其源代码显示出来,这种涉及到网络操作的程序一般都是需要开一个线程完成网络访问,但是在获得页面源码后,是不能直接在网络操作线程中调用TextView.setText()的.因为其他线程中是不能直接访问主UI线程成员 。


android提供了几种在其他线程中访问UI线程的方法。
Activity.runOnUiThread( Runnable )
View.post( Runnable )
View.postDelayed( Runnable, long )
Hanlder
这些类或方法同样会使你的代码很复杂很难理解。然而当你需要实现一些很复杂的操作并需要频繁地更新UI时这会变得更糟糕。
          mHandler.postDelayed(mRunnable, 1000);  //这么做可以每隔1s调用自身。
      } 
  };

你可能感兴趣的:(android 中实时显示)