學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裏面執行。這兩個方法在每個用的地方執行的不一樣,所以抽象出來。需要用的時候只需要創建一個匿名內部類再實現以上兩個方法就可以了,示例可以參照小程序耗時操作示例