Android下多线程同UI交互的Handler框架代码

1 说明
Android开发过程中,使用多线程是一个很平常的事情,而多线程处理完成后,必然需要更新UI,本文略加整理,并附上框架代码,希望对大家有用。

2 内容
代码主要结构:
Activity代码文件
ProcessThread代码文件

其中Activity代码中创建了Handler msgHandler对象,并重载了handleMessage方法。
ProcessThread中的构造函数,需要传入msgHandler对象作为构造参数,在处理数据后,发送消息即可。在主Activity中的handleMessage就会收到消息。

3 项目代码

主Activity代码:

复制代码
package com.jouhu.androidthreaduihandler;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class AndroidThreadUIHandlerActivity extends Activity {
public static final int RECV_DATA = 1;

Button btn = null;
ProcessThread pThread = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

btn = (Button)findViewById(R.id.button1);
btn.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
pThread = new ProcessThread(msgHandler);
}
});

}

private final Handler msgHandler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
switch(msg.what)
{

case RECV_DATA:
if(pThread != null)
{
byte[] data = pThread.getOneBuffer();
UpdateUI(data);
}
break;

}
}

private void UpdateUI(byte[] data) {
// TODO Auto-generated method stub

}
};
}
复制代码


线程代码模型:

复制代码
package com.jouhu.androidthreaduihandler;

import java.util.ArrayList;

import android.os.Handler;
import android.os.Message;

public class ProcessThread extends Thread {

private static final int BUFF_SIZE = 1024;
private Handler handler;
private ArrayList bytesList = null;
boolean running = true;

public ProcessThread(Handler handler)
{
this.handler = handler;
bytesList = new ArrayList();
}

public void run()
{
while(running)
{
//
byte[] buff = new byte[BUFF_SIZE];
Recv(buff,BUFF_SIZE);
Message msg = handler.obtainMessage(AndroidThreadUIHandlerActivity.RECV_DATA);
msg.obj = "Recv";
msg.sendToTarget();
}
}

private void Recv(byte[] buff, int buffSize) {
// TODO Auto-generated method stub
//可以处理Socket接收数据
}

public void AddOneBuffer(byte[]data)
{
//线程同步
synchronized(bytesList)
{
bytesList.add(data);
}
}

public byte[] getOneBuffer()
{
//线程同步
byte[] rdata = null;
synchronized(bytesList)
{
if(bytesList.size() > 0)
rdata = bytesList.remove(0);
}
return rdata;
}

}
复制代码

4 源代码下载

模型代码下载:
AndroidThreadUIHandler
-END-

本文同发地址:http://doandroid.info/2012/03/15/android%E4%B8%8B%E5%A4%9A%E7%BA%BF%E7%A8%8B%E5%90%8Cui%E4%BA%A4%E4%BA%92%E7%9A%84handler%E6%A1%86%E6%9E%B6%E4%BB%A3%E7%A0%81/

欢迎转载,注明出处。



posted on   移动开发团队  阅读(911)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库

导航

< 2012年3月 >
26 27 28 29 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
1 2 3 4 5 6 7
点击右上角即可分享
微信分享提示