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

来源:互联网 发布:精子检查中优化处理 编辑:程序博客网 时间:2024/06/05 18:09

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;@Overrideprotected 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(){@Overridepublic void onClick(View arg0){// TODO Auto-generated method stubnew Thread(new Runnable() // 工作线程刷新UI{@Overridepublic void run(){// TODO Auto-generated method stubwhile (!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(){@Overridepublic 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);}};@Overridepublic 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;}}




原创粉丝点击