ch022 Android Handler
--------------------------------------------AndroidManifest.xml----------------------------------
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
package="com.ch22"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main">
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
--------------------------------------------Layoutactivity_main.xml-----------------------------
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/btn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Button"/>
</LinearLayout>
--------------------------------------------MainActivity.java--------------------------------------
packagecom.ch22;
importandroid.app.Activity;
importandroid.graphics.Color;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.os.Message;
importandroid.util.Log;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
/**
*
*项目名称:com.ch22
*类名称:MainActivity
*类描述:Handler
*创建人:方勇
*创建时间:2012-12-10下午8:29:04
*Copyright(c)方勇-版权所有
*/
publicclassMainActivityextendsActivity{
privateButtonbtn;
/*更新UI主线程对象*/
privateHandlerhandler=newHandler(){
/*异步接受消息*/
@Override
publicvoidhandleMessage(Messagemsg){
super.handleMessage(msg);
/*获取Map数据*/
Bundlebundle=msg.getData();
/*取得颜色值*/
intcolor=bundle.getInt("color");
MainActivity.this.btn.setBackgroundColor(color);
Log.i("fy","Handler="+Thread.currentThread().getName());
}
};
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findView();
setListeners();
Log.i("fy","MainHandler="+Thread.currentThread().getName());
}
/*实例化UI*/
privatevoidfindView(){
this.btn=(Button)findViewById(R.id.btn);
}
/*设置监听*/
privatevoidsetListeners(){
btn.setOnClickListener(newbtnOnClickListener());
}
classbtnOnClickListenerimplementsOnClickListener{
publicvoidonClick(Viewv){
MyThreadmy=newMyThread();
/*启动线程*/
newThread(my).start();
}
};
classMyThreadimplementsRunnable{
publicvoidrun(){
try{
Thread.sleep(3000);//子线程睡眠3秒
}catch(InterruptedExceptione){
e.printStackTrace();
}
/*实例化消息*/
Messagemsg=newMessage();
Bundlebundle=newBundle();
bundle.putInt("color",Color.RED);
msg.setData(bundle);
/*发送消息,告诉老大(主线程)请更新*/
MainActivity.this.handler.sendMessage(msg);
Log.i("fy","MyThread="+Thread.currentThread().getName());
}
};
}
--------------------------------------------结果-----------------------------------------------------
点击按钮前
点击按钮后的3秒,按钮变为红色
<!--EndFragment-->
更多相关文章
- 你对进程线程到底理解有多少
- C# 多线程--线程池的详细介绍
- C#中多线程之Thread类详解
- Catalog Service - 解析微软微服务架构实例代码
- C#线程控制的实例详解
- 介绍一个微软开源项目网站--CodePlex
- 使用ConcurrentDictionary多线程同步字典集合实例详解
- c#中关于多线程创建对象的示例分享
- C#多线程之Semaphore的使用详解