Android编程学习之Message处理Handler
- 1.实例化Handler对象,并重写void handleMessage(Message msg)方法:
Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
// TODO Auto-generated method stub
super.handleMessage(msg);
if(msg.what==1)
{
byte[] data = (byte[]) msg.obj;
Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length);
imageView.setImageBitmap(bm);
}
}
};
- 2.在程序中定义并发送Message:
Message message = handler.obtainMessage();
message.arg1=1;
message.arg2=2;
message.obj=data;
message.what=1;
handler.sendMessage(message);
也可以使用如下方法延迟10ms发送:
handler.sendMessageDelayed(handler.obtainMessage(int what,Object obj), 10);
- 例子1 android_handler_downloadimage MainActivity.java: :
package com.example.android_handler_downloadimage;
import java.io.IOException;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends Activity
{
private Button button;
private ImageView imageView;
private ProgressDialog dialog;
private int IS_COMPLETE = 0;
private static final String PATH = "http://10.0.2.2:8080/MyFirstWeb/mm.jpeg";
Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
// TODO Auto-generated method stub
super.handleMessage(msg);
if (msg.what == 1)
{
byte[] data = (byte[]) msg.obj;
Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length);
imageView.setImageBitmap(bm);
if (IS_COMPLETE == 1)
{
dialog.dismiss();
}
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) this.findViewById(R.id.imageView1);
dialog = new ProgressDialog(this);
dialog.setTitle("提示");
dialog.setMessage("Loading...");
button = (Button) this.findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
// TODO Auto-generated method stub
dialog.show();
new Thread(new MyThread()).start();
}
});
}
@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;
}
class MyThread implements Runnable
{
@Override
public void run()
{
// TODO Auto-generated method stub
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(PATH);
try
{
HttpResponse response = httpClient.execute(httpPost);
if (response.getStatusLine().getStatusCode() == 200)
{
byte[] data = EntityUtils.toByteArray(response.getEntity());
Message message = handler.obtainMessage();
message.arg1 = 1;
message.arg2 = 2;
message.obj = data;
message.what = 1;
handler.sendMessage(message);
IS_COMPLETE = 1;
}
}
catch (ClientProtocolException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
httpClient.getConnectionManager().shutdown();
}
}
}
}
- 例子2 android_handler_textview MainActivity.java::
package com.example.android_handler_textview;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity
{
private Button button;
private TextView textView;
private MyHandler handler;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
handler = new MyHandler();
textView = (TextView) this.findViewById(R.id.textView1);
button = (Button) this.findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
// TODO Auto-generated method stub
new Thread(new MyThread()).start();
}
});
}
@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;
}
class MyHandler extends Handler
{
@Override
public void handleMessage(Message msg)
{
// TODO Auto-generated method stub
super.handleMessage(msg);
textView.append((String) msg.obj + msg.arg1);
}
}
class MyThread implements Runnable
{
@Override
public void run()
{
// TODO Auto-generated method stub
int i = 1;
while (i <= 20)
{
try
{
Thread.sleep(500);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
Message message = handler.obtainMessage();
message.arg1 = i;
message.obj = "Tom";
i++;
handler.sendMessage(message);
}
}
}
}
- 例子3 android_handler_progressdialog MainActivity.java::
package com.example.android_handler_progressdialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.app.ProgressDialog;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity
{
private Button button;
private ProgressDialog dialog;
private MyHandler handler;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
handler = new MyHandler();
dialog = new ProgressDialog(this);
dialog.setTitle("下载进度");
dialog.setMessage("Loading...");
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
button = (Button) this.findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
// TODO Auto-generated method stub
dialog.show();
new Thread(new MyThread()).start();
}
});
}
@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;
}
class MyHandler extends Handler
{
@Override
public void handleMessage(Message msg)
{
// TODO Auto-generated method stub
super.handleMessage(msg);
dialog.setProgress(msg.arg1);
dialog.setSecondaryProgress(msg.arg2);
if (msg.what == 1)
{
dialog.dismiss();
}
}
}
class MyThread implements Runnable
{
@Override
public void run()
{
// TODO Auto-generated method stub
int i = 0;
int k = 0;
while (i <= 100)
{
try
{
Thread.sleep(50);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
Message message = handler.obtainMessage();
message.arg1 = i;
message.arg2 = k + 10;
if (i == 100)
{
message.what = 1;
}
handler.sendMessage(message);
i++;
k++;
}
}
}
}