两点事实:
1. Android不允许子线程直接访问Activity中的组件信息;
2. Android 4.0以后访问网络的代码部分不能够直接写在主线程中了,否则会产生异常:android.os.NetworkOnMainThreadException。
解决异常的方法是利用子线程进行网络连接,同时可以通过Handler,由子线程向主线程发消息,进行线程之间的交互。
如:
启动子线程,负责网络连接:
new Thread()
{
public void run()
{
Socket s=null;
try
{
s = new Socket("192.168.1.100",8080);
}
catch (Exception e)
{
e.printStackTrace();
}
handler.sendEmptyMessage(0);
}
}.start();
主线程中Handler接收消息,负责响应:
Handler handler=new Handler()
{
public void handleMessage(Message msg)
{
if(msg.what==0)
{
//修改组件
}
}
};