Android:UI更新方法三:Handler+Worker Thread
activity_main.xml
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- tools:context=".MainActivity" >
- <TextView
- android:id="@+id/textView1"
- android:layout_width="wrap_content"
- android:layout_height="50dp"
- android:background="#ff999999"
- android:text="@string/hello_world" />
- <Button
- android:id="@+id/button1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="Button" />
- </LinearLayout>
MainActivity.java
- package com.example.updateui;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Message;
- import android.app.Activity;
- import android.util.Log;
- import android.view.Menu;
- import android.view.View;
- import android.view.Window;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.TextView;
- public class MainActivity extends Activity
- {
- private static final String TAG = MainActivity.class.getSimpleName();
- private static final int REFRESH_ACTION = 1;
- private Button mButton;
- private TextView mTextView;
- private int mCount = 0;
- @Override
- protected void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- mTextView = (TextView) findViewById(R.id.textView1);
- mButton = (Button) findViewById(R.id.button1);
- mButton.setOnClickListener(new OnClickListener()
- {
- @Override
- public void onClick(View arg0)
- {
- // TODO Auto-generated method stub
- new Thread(new Runnable() // 工作线程刷新UI
- {
- @Override
- public void run()
- {
- // TODO Auto-generated method stub
- while (!Thread.currentThread().interrupted())
- {
- /** 这段代码也可以:
- * Message msg = new Message(); msg.what =
- * MainActivity.REFRESH_ACTION;
- * mHandler.sendMessage(msg);
- */
- //发送消息到UI线程进行刷新
- mHandler.obtainMessage(MainActivity.REFRESH_ACTION).sendToTarget();
- try
- {
- Thread.sleep(1000);
- }
- catch (InterruptedException e)
- {
- Thread.currentThread().interrupt();
- }
- }
- }
- }).start();
- }
- });
- }
- private Handler mHandler = new Handler()
- {
- @Override
- public void handleMessage(Message msg)
- {
- // 处理消息
- switch (msg.what)
- {
- case MainActivity.REFRESH_ACTION:
- mCount++;
- mTextView.setText("I'm updated:" + mCount);// 更新UI,这里已经是UI线程
- Log.i(TAG, "handleMessage");
- break;
- }
- super.handleMessage(msg);
- }
- };
- @Override
- public boolean onCreateOptionsMenu(Menu menu)
- {
- // Inflate the menu; this adds items to the action bar if it is present.
- getMenuInflater().inflate(R.menu.activity_main, menu);
- return true;
- }
- }

浙公网安备 33010602011771号