多线程
在android开发中通常主界面县城,不可进行网络连接操作,因此要编写子线程进行网络连接。通常可将子线程写成一个类,每次初始化这个类对象进行开启网络连接:
继承Thread的方法
private class AcceptThread extends Thread {
public AcceptThread() {
}
public void run() {
}
}
在应用这个类时秩序初始化即可:
Thread tt=new AcceptThread()
tt.start()
Runnable方法开启线程:
public class duihua2 extends AppCompatActivity implements Runnable {
protected void onCreate(Bundle savedInstanceState){
new Thread() {
public void run() {
try {
final String d="发消息";
socket = ((MySocket)getApplication()).getSocket();
out =new DataOutputStream(socket.getOutputStream());
out.writeUTF(d+"12312312312");
new Thread(duihua2.this).start();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
//重写run方法,在该方法中输入流的读取
@Override
public void run() {
try {
while (true) {
if (socket.isConnected()) {
if (!socket.isInputShutdown()) {
try{
in1 = new DataInputStream(socket.getInputStream());
if (in1!= null) {
String s=in1.readUTF().toString();
String[] d=s.split("/");
handler0.sendEmptyMessage(0x123);
if(d[0].trim().equals("协助打电话"))
{
content =d[1].trim();
if(content.length()>5)
{
handler3.sendEmptyMessage(0x123);
}
}
else{
content =s+"\n";
handler.sendEmptyMessage(0x123);
}
}
}catch(Exception e){
System.out.println(e.getMessage());
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
在关闭线程,通常当run中的程序运行完成时该程序自动关闭。通常选择设置一个关键字,来关闭线程
while(panduaun)
初始化时panduan=true
当该页面接受时关闭该线程:panduan=false
通常每个activity的生命周期是有限的,因此不可在其中使用长连接,以避免内存泄漏。
在代码编写的过程中尽量的定义类,以使得代码更加简洁
server后台运行服务,可保存长连接
application中也可保存长连接
adapter与listview搭配只用编辑各种信息展示界面