android编程之多线程编程实例分析
本文实例讲述了android编程之多线程编程实现方法。分享给大家供大家参考。具体分析如下:
该功能与前面《android开发socket编程之udp发送实例分析》中一样,当按下键后,发送文本框中数据给PC。不同的是把发送数据的功能放在一个线程socket_send中。
一、环境:
win7+eclipse+ndk
二、代码:
主类test_socket.java
packagetest.soket;
//importcom.test_button.R;
importjava.io.DataOutputStream;
importjava.io.IOException;
importjava.net.DatagramPacket;
importjava.net.DatagramSocket;
importjava.net.InetAddress;
importjava.net.Socket;
importjava.net.SocketException;
importjava.net.UnknownHostException;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.widget.Button;
importandroid.widget.TextView;
publicclasstest_socketextendsActivity{
publicstaticTextViewshow;
publicstaticButtonpress;
publicstaticbooleanflag;
/**Calledwhentheactivityisfirstcreated.*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//开辟控件空间
show=(TextView)findViewById(R.id.editText1);
press=(Button)findViewById(R.id.button1);
flag=false;
soket_sendthread=newsoket_send();
thread.init();
thread.start();
press.setOnClickListener(newButton.OnClickListener()
{
@Override
publicvoidonClick(Viewv)
{
flag=true;
}
});
}
}
线程类socke_sendt.java:
packagetest.soket;
importjava.io.DataOutputStream;
importjava.io.IOException;
importjava.net.DatagramPacket;
importjava.net.DatagramSocket;
importjava.net.InetAddress;
importjava.net.Socket;
importjava.net.SocketException;
importjava.net.UnknownHostException;
importjava.util.LinkedList;
importandroid.media.AudioFormat;
importandroid.media.AudioRecord;
importandroid.media.MediaRecorder;
importandroid.util.Log;
publicclasssoket_sendextendsThread
{
privatestaticfinalintMAX_DATA_PACKET_LENGTH=40;
privatebyte[]buffer=newbyte[MAX_DATA_PACKET_LENGTH];
privateDatagramPacketdataPacket;
privateDatagramSocketudpSocket;
publicvoidinit()
{
try
{
udpSocket=newDatagramSocket(5554);
}
catch(SocketExceptione)
{
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
dataPacket=newDatagramPacket(buffer,MAX_DATA_PACKET_LENGTH);
Stringstr="hello,jdh";//这是要传输的数据
byteout[]=str.getBytes();//把传输内容分解成字节
dataPacket.setData(out);
dataPacket.setLength(out.length);
dataPacket.setPort(5554);
try
{
InetAddressbroadcastAddr=InetAddress.getByName("192.168.0.248");
dataPacket.setAddress(broadcastAddr);
udpSocket.send(dataPacket);
}
catch(IOExceptione)
{
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
publicvoidrun()
{
while(true)
{
if(test_socket.flag)
{
//获得输入框文本
CharSequencestr=test_socket.show.getText();
byteout[]=str.toString().getBytes();
dataPacket.setData(out);
dataPacket.setLength(out.length);
try
{
InetAddressbroadcastAddr=InetAddress.getByName("192.168.0.248");
dataPacket.setAddress(broadcastAddr);
udpSocket.send(dataPacket);
}
catch(IOExceptione)
{
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
test_socket.flag=false;
}
}
}
}
注意:程序中采用的线程间通信的方法是把需要共享的变量设置成public属性
希望本文所述对大家的Android程序设计有所帮助。