Handler&Message消息机制(8)

sunstarchen 2015-04-30

                             同学们一定遇到过这样的问题,在另一个类中处理好的数据,想要更新到主线程UI上

会发现更新失败,而在java平时编程中是可以的,其实这是安卓特有的规定,子线程不能直接将数据更新到主线程UI上,那么我们怎么做到去传递消息呢?

        这里就要用到Handler 和Message了。这里我们建立一个实例看看怎么用,这里设置每隔1秒在主线程更新递增。

定义布局管理器:activity_main

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

</RelativeLayout>

主Activity函数代码:

public class MainActivity extends Activity {

	private static int count=0;
	public static final int SET=1;//之所以定义final,是因为在内部类也能使用,设置what标记
	private TextView info=null;
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		this.info=(TextView)super.findViewById(R.id.info);
	
		Timer timer=new Timer();//定义调度器
		timer.schedule(new MyTask(), 0,1000);//立即开始,每隔一秒增长
	}
	/*
	 * 设置一个Handler对象
	 */
	private Handler myHandler=new Handler(){
		public void handleMessage(android.os.Message msg){
			switch(msg.what){//判断操作类型
			case SET:
			MainActivity.this.info.setText("ee"+count++);//设置文本操作
			}
		}
		
	};
	/*
	 * 定义定时调度的具体实现类,相当于子线程
	 */
	private class MyTask extends TimerTask{

		@Override
		public void run() {
			Message msg=new Message();//定义Message
			msg.what=SET;//类型
			MainActivity.this.myHandler.sendMessage(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.main, menu);
		return true;
	}

}

 实现效果如下:


Handler&Message消息机制(8)


Handler&Message消息机制(8)
 
 

相关推荐