学android的都知道,android是不能在主线程里面执行耗时操作的,解决方法也有很多种。下面我介绍一种熟悉java的人比较快接受的一种方式。
分三步
1、先在线程里执行耗时操作。
2、执行完,不管耗时操作里面出现什么问题,都要发送消息给handler。
3、handler接收到消息后,去执行相应的UI。
好了,先贴代码先
public abstract class CommonHandle
{
private static final String THREAD_NAME = "dataprocess_thread";
protected static final int UPDATE_UI = 0;
protected static final int INVALIDEUSER = 3;
Handler messageHandler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
super.handleMessage(msg);
switch (msg.what)
{
case UPDATE_UI:
try
{
updateUI();
}
catch (Exception e)
{
}
break;
default:
break;
}
}
};
public void start()
{
new Thread(THREAD_NAME)
{
public void run()
{
try
{
handleData();
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
Message.obtain(messageHandler, UPDATE_UI).sendToTarget();
}
};
}.start();
}
public abstract void handleData() throws Exception;
public abstract void updateUI();
}
在这里,我把它写成一个通用抽象类,耗时操作在handleData函数里面执行,更新UI的操作放在updateUI里面执行。这两个方法在每个用的地方执行的不一样,所以抽象出来。需要用的时候只需要创建一个匿名内部类再实现以上两个方法就可以了,示例可以参照小程序 耗时操作示例