Handler的用法大汇总

Handler的用法大汇总

************************************mHandler.postDelayed (图片轮询)和mHandler.post(跟新UI)************************************

activity_main.xml

<RelativeLayout xmlns:android=""xmlns:tools=""android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.example.handlerdemo.MainActivity" ><TextViewandroid:id="@+id/tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello_world" /><ImageViewandroid:id="@+id/imageView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_below="@+id/tv"android:layout_marginRight="52dp"android:layout_marginTop="84dp"android:src="@drawable/ic_launcher" /></RelativeLayout>MainActivitypackage com.example.handlerdemo;import android.R.mipmap;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.view.Menu;import android.view.MenuItem;import android.widget.ImageView;import android.widget.TextView;public class MainActivity extends Activity {private TextView tv;private Handler mHandler = new Handler();private ImageView mImageView;private int images[] = {R.drawable.ic_launcher,R.drawable.ic_launcher1,R.drawable.ic_launcher2};//图片位置private int index;private MyRun myRun = new MyRun();class MyRun implements Runnable{@Overridepublic void run() {index ++;index = index%3;mImageView.setImageResource(images[index]);/**在分线程中mHandler.post更新UI界面,1秒后handler再次循环发送Runnable对象*/mHandler.postDelayed(myRun, 1000);}}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);/** * Handler被绑定到主线程中,在分线程中mHandler.post更新UI界面, * handler可以分发Message对象和Runnable对象到主线程中 */tv = (TextView) findViewById(R.id.tv);new Thread() {public void run() {mHandler.post(new Runnable() {@Overridepublic void run() {tv.setText("xxx");}});};}.start();/** * 定时器作用,Handler被绑定到主线程中,在主线程中,,1秒后handler直接发送Runnable对象 */mImageView = (ImageView) findViewById(R.id.imageView);mHandler.postDelayed(myRun, 1000);}}</pre><pre name="code" class="java">***************************************更新uI的5种方式********************************布局文件只有一个textview<pre name="code" class="java">package com.example.handlerdemo;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.HandlerThread;import android.os.Looper;import android.os.Message;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity {private TextView textView;private Handler handler = new Handler() {public void handleMessage(Message msg) {textView.setText("ok2");Log.e("TAG", ""+msg.what);//1};};/*** * 方法一 */private void handler1() {handler.post(new Runnable() {@Overridepublic void run() {textView.setText("ok1");}});}/** * 方法二 */private void handler2() {handler.sendEmptyMessage(1);}/** * 方法三 */private void updateUI(){runOnUiThread(new Runnable() {@Overridepublic void run() {textView.setText("ok3");}});}/** * 方法四 */private void viewUpdateUi(){textView.post(new Runnable() {@Overridepublic void run() {textView.setText("ok4");}});}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = (TextView) findViewById(R.id.textView);/** * 方法五 */handler.post(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubtextView.setText("ok5");}});new Thread() {public void run() {try {Thread.sleep(1000);//handler1();//handler2();//updateUI();//viewUpdateUi();} catch (InterruptedException e) {e.printStackTrace();}};}.start();}}

***********************************创建消息,发送消息各2种方式***************************************

Ui界面不变,复用上例的xml布局

MainActivity

package com.example.handlerdemo;import android.R.mipmap;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.Menu;import android.view.MenuItem;import android.widget.ImageView;import android.widget.TextView;public class MainActivity extends Activity {private TextView tv;private Handler mHandler = new Handler() {public void handleMessage(android.os.Message msg) {tv.setText(""+msg.arg1+">>>"+msg.arg2+""+msg.obj);};};private ImageView mImageView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv = (TextView) findViewById(R.id.tv);mImageView = (ImageView) findViewById(R.id.imageView);new Thread() {public void run() {try {Thread.sleep(2000);Message message = mHandler.obtainMessage();//Message message = new Message(); 或者可以用这个创建msgmessage.arg1 =88;message.arg2 =100;Person person = new Person();person.age =10;person.name = "wyf";message.obj = person;message.sendToTarget();//mHandler.sendMessage(message); 或者可以用这个发送消息} catch (InterruptedException e) {e.printStackTrace();}};}.start();}class Person{public int age;public String name;@Overridepublic String toString() {return "Person [age=" + age + ", name=" + name + "]";}}}**********************************移除消息以及handleMessage返回值意义*******************************************************我也相信爱可以排除万难;只是,万难之后,又有万难。这是我更相信的。

Handler的用法大汇总

相关文章:

你感兴趣的文章:

标签云: