我用Activity+ViewPgae+Fragment做了一个翻页的程序,有四个页面,这四个页面都要接收UDP数据,
我 就做了一个UDP接收线程。在Fragment的onCreate中创建接收线程。程序运行没有问题,但问题是,当程序运行的时候,onCreate了A+B页面,当翻页到B页面以后,又Create了C页面,翻到了C页面了以后,Create了D页面。这样,我在OnCreate中一共创建了4次UDP接收数据的线程,在关闭线程的时候,就会出错。
请问大虾:怎样创建一次UDP线程,就可以在4个页面中使用了?我是刚做Android开发,不是太了解,请高手解答,不胜感激!UDP多线程Fragment
我 就做了一个UDP接收线程。在Fragment的onCreate中创建接收线程。程序运行没有问题,但问题是,当程序运行的时候,onCreate了A+B页面,当翻页到B页面以后,又Create了C页面,翻到了C页面了以后,Create了D页面。这样,我在OnCreate中一共创建了4次UDP接收数据的线程,在关闭线程的时候,就会出错。
请问大虾:怎样创建一次UDP线程,就可以在4个页面中使用了?我是刚做Android开发,不是太了解,请高手解答,不胜感激!UDP多线程Fragment
package com.example.udp;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.util.Arrays;import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;import com.example.mypublic.MyAppData;public class UDPServerThread extends Thread { private static UDPServerThread udpServerThread;
private Handler mHandler;
private static MyAppData myAppData ;
private static int ServerPort;
private DatagramSocket mServerSocket = null;
public static UDPServerThread getInstance(Context context){
if(null==udpServerThread){
myAppData = ((MyAppData)context.getApplicationContext());
ServerPort = myAppData.getServerPort();
udpServerThread=new UDPServerThread();
udpServerThread.start();
}
return udpServerThread;
} @Override
public void run() {
// TODO Auto-generated method stub
super.run();
startServer();
} // 开始服务
private void startServer() {
// TODO Auto-generated method stub
byte[] request = new byte[8192];
try {
mServerSocket = new DatagramSocket(ServerPort);
DatagramPacket pack = new DatagramPacket(request, request.length);
try {
while (true) {
// 获取请求
mServerSocket.receive(pack);
String RecMsg = new String(pack.getData(),0,pack.getLength());
// 数据处理
String sBT,sBW,sCommandID,sData;
int iDataLen,iMsgLen;
iMsgLen = RecMsg.length();
//包头
sBT = RecMsg.substring(0, 1);
//命令
sCommandID = RecMsg.substring(1, 5);
//长度(16进制)
iDataLen = Integer.parseInt(RecMsg.substring(5, 9), 16);
//数据内容
sData = RecMsg.substring(9, RecMsg.length()-1);
//包尾
sBW = RecMsg.substring(RecMsg.length()-1, RecMsg.length());
char[]charsBT=sBT.toCharArray();
char[]charsBW=sBW.toCharArray();
int iBT = (int)charsBT[0];
int iBW = (int)charsBW[0];
if (iBT == 2 && iBW == 3 ){
if (!sData.equals("") ){
showResponse(sCommandID,sData,iDataLen);
}
}
else showResponse("FFFF",iBT+" "+RecMsg +" "+iBW+" "+iMsgLen,0); //接收数据错误返回值
Arrays.fill(request,(byte)0);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//mServerSocket.close();
} catch (SocketException e) {
// TODO: handle exception
e.printStackTrace();
}
}
//发送消息到界面线程消息队列中
public void showResponse( String id, String data,int iDataLen) {
// TODO Auto-generated method stub
Bundle bundle = new Bundle();
bundle.putString("CommandID", id);
bundle.putString("MSG", data);
bundle.putInt("DataLength", iDataLen);
Message msg = new Message();
msg.setData(bundle);
mHandler.sendMessage(msg);
}
public Handler getHandler() {
return mHandler;
} public void setHandler(Handler mHandler) {
this.mHandler = mHandler;
}}