其实线程这个东西,说复杂也不是很复杂,说简单,他能搞死你。本小白一开始接触线程是在去年,写一个小的app时需要联网,连了半天还是报错,权限也申请了,代码也没啥问题,就是报错,后来打了个log看了一下,说是不能在主线程里连网。坑爹啊,我看了网上教程写的,那里面也没提到要在子线程里啊。后来看了一下,说是从4.0开始的。话不多说了,看代码。
private Thread threadLogin;
private Handler handler;
handler = new Handler() {
@Override
public void handleMessage(Message msg) {//处理线程消息
switch (msg.what) {
case 0:
//业务代码
case 1:
//业务代码
}
}
};
threadLogin = new Thread(runnable);
threadLogin.start();
Runnable runnable = new Runnable() {
@Override
public void run() {
try {
Message msg = new Message();
msg.what = MSG_SUC;
msg.obj = new String[]{userid, username};//附带数据,如果对象不是全局的,可以讲对象作为msg的一部分发送给主线程
handler.sendMessage(msg);//向主线程发送消息,由于安卓连接网络必须在子线程中进行,所以在获得数据后,使用handler向主线程返回数据
}
else{
Message msg = new Message();
msg.what = MSG_FAI;
handler.sendMessage(msg);
}
} catch (Exception e) {
Message msg = new Message();
msg.what = MSG_FAI;
handler.sendMessage(msg);
}
}
};
基本的流程是这样的:
在主线程中开辟一个新的线程,线程启动,执行完业务逻辑后,发送给主线程,主线程使用handler处理线程发送的消息。
本人是一个安卓小白,线程上还有一个问题,就是线程在处理完业务后,会不会自动销毁,如果不是的话,怎么才能让他手动销毁,恳请各位大佬解答。