使用android4.4,在做一个网络下载时遇到这个问题,经过问了两位大神后发现是这个版本不支持在主线程中使用耗时的线程,比如这种下载,因为,系统会关闭在5秒内无反应的程序,所以就想了把这个操作放到子线程中,在android有个很好的Handler类为处理这个问题
NetworkThread.java类
public class NetworkThread implements Runnable {
private String url;
private Handler handler;
//从主线程中把需要的参数传递过来
public NetworkThread(String url, Handler handler) {
this.url = url;
this.handler = handler;
}
@Override
public void run() {
StringBuffer respData = new StringBuffer();
try {
/*
* 下面是两种网络下载的操作
*/
URL myUrl = new URL(url);
URLConnection conn = myUrl.openConnection();
BufferedReader reader = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
/*HttpClient httpClient = new DefaultHttpClient();
HttpResponse httpRsp= httpClient.execute(new HttpGet(url));
HttpEntity entity = httpRsp.getEntity();
BufferedReader reader = new BufferedReader(new InputStreamReader(
entity.getContent()));*/
String line = reader.readLine();
while (line != null) {
respData.append(line);
line = reader.readLine();
}
//得到一个消息对象
Message msg = Message.obtain();
//赋值一个变量
msg.obj = respData;
//发送这个消息
handler.sendMessage(msg);
} catch (Exception e) {
e.printStackTrace();
}
}
}
MainActivity.java
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
System.out.println("执行后的result:" + msg.obj);
}
};
NetworkThread networkThread = new NetworkThread(url, handler);
new Thread(networkThread).start();
在主线程中启动一个子线程,并用Handler类来处理这个消息。