Android:UI更新方法三:Handler+Worker Thread

activity_main.xml

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="vertical"  
  6.     tools:context=".MainActivity" >  
  7.   
  8.     <TextView  
  9.         android:id="@+id/textView1"  
  10.         android:layout_width="wrap_content"  
  11.         android:layout_height="50dp"  
  12.         android:background="#ff999999"  
  13.         android:text="@string/hello_world" />  
  14.   
  15.     <Button  
  16.         android:id="@+id/button1"  
  17.         android:layout_width="wrap_content"  
  18.         android:layout_height="wrap_content"  
  19.         android:text="Button" />  
  20.   
  21. </LinearLayout>  


MainActivity.java


    1. package com.example.updateui;  
    2.   
    3. import android.os.Bundle;  
    4. import android.os.Handler;  
    5. import android.os.Message;  
    6. import android.app.Activity;  
    7. import android.util.Log;  
    8. import android.view.Menu;  
    9. import android.view.View;  
    10. import android.view.Window;  
    11. import android.view.View.OnClickListener;  
    12. import android.widget.Button;  
    13. import android.widget.TextView;  
    14.   
    15. public class MainActivity extends Activity  
    16. {  
    17.     private static final String TAG = MainActivity.class.getSimpleName();  
    18.     private static final int REFRESH_ACTION = 1;  
    19.     private Button mButton;  
    20.     private TextView mTextView;  
    21.     private int mCount = 0;  
    22.   
    23.     @Override  
    24.     protected void onCreate(Bundle savedInstanceState)  
    25.     {  
    26.         super.onCreate(savedInstanceState);  
    27.         setContentView(R.layout.activity_main);  
    28.         mTextView = (TextView) findViewById(R.id.textView1);  
    29.         mButton = (Button) findViewById(R.id.button1);  
    30.         mButton.setOnClickListener(new OnClickListener()  
    31.         {  
    32.             @Override  
    33.             public void onClick(View arg0)  
    34.             {  
    35.                 // TODO Auto-generated method stub  
    36.                 new Thread(new Runnable() // 工作线程刷新UI  
    37.                         {  
    38.   
    39.                             @Override  
    40.                             public void run()  
    41.                             {  
    42.                                 // TODO Auto-generated method stub  
    43.                                 while (!Thread.currentThread().interrupted())  
    44.                                 {  
    45.                                     /** 这段代码也可以: 
    46.                                      * Message msg = new Message(); msg.what = 
    47.                                      * MainActivity.REFRESH_ACTION; 
    48.                                      * mHandler.sendMessage(msg); 
    49.                                      */  
    50.                                     //发送消息到UI线程进行刷新  
    51.                                     mHandler.obtainMessage(MainActivity.REFRESH_ACTION).sendToTarget();  
    52.                                     try  
    53.                                     {  
    54.                                         Thread.sleep(1000);  
    55.                                     }  
    56.                                     catch (InterruptedException e)  
    57.                                     {  
    58.                                         Thread.currentThread().interrupt();  
    59.                                     }  
    60.                                 }  
    61.                             }  
    62.   
    63.                         }).start();  
    64.   
    65.             }  
    66.         });  
    67.     }  
    68.   
    69.     private Handler mHandler = new Handler()  
    70.     {  
    71.         @Override  
    72.         public void handleMessage(Message msg)  
    73.         {  
    74.             // 处理消息  
    75.             switch (msg.what)  
    76.             {  
    77.             case MainActivity.REFRESH_ACTION:  
    78.                 mCount++;  
    79.                 mTextView.setText("I'm updated:" + mCount);// 更新UI,这里已经是UI线程  
    80.                 Log.i(TAG, "handleMessage");  
    81.                 break;  
    82.             }  
    83.             super.handleMessage(msg);  
    84.         }  
    85.   
    86.     };  
    87.   
    88.     @Override  
    89.     public boolean onCreateOptionsMenu(Menu menu)  
    90.     {  
    91.         // Inflate the menu; this adds items to the action bar if it is present.  
    92.         getMenuInflater().inflate(R.menu.activity_main, menu);  
    93.         return true;  
    94.     }  
    95.   
posted @ 2016-11-19 15:15  天涯海角路  阅读(108)  评论(0)    收藏  举报