最近接觸到一些數據量大的處理頁面,那麼不可避免的就要用到異步加載的方法。
總結了下:
1、最主流的是Handle + Thread方式;
2、使用AsyncTask
3、Activity.runOnUiThread(Runnable)
View.post(Runnable)
View.postDelayed(Runnable, long)
4、使用AsyncQueryHandler
分別給出示例:
①Handle + Thread方式
private Handler mHandler = new Handler();
public class MyThread extends Thread {
Message msg = new Message();
mHandler.sendMessage(msg);
}
②AsyncTask
就是如果oncreate的時候 數據量就很大 而你恰恰也沒有想要分頁的打算 可以用這個了
new LoadData().execute();
private class LoadData extends AsyncTask<Object, Object, Object>{
protected Object doInBackground(Object... params){
return null; //查詢數據
}
protected void onPostExecute( String result ) {
myText.setText( result ); //刷新頁面
}
}
③View.post(Runnable)
比如向撥號盤搜索聯繫人的功能,就可以在監聽EditText變化的時候用到。
private Handler searchListHandler = new Handler();
public void afterTextChanged(Editable s){
searchListHandler.post(runnable);
}
private Runnable runnable = new Runnable(){
public void run(){}
};
Activity.runOnUiThread(Runnable)和View.post(Runnable)是類似的
public void onClick( View v ) {
new Thread( new Runnable() {
public void run() {
loadNetWork();
Activity.runOnUiThread(new Runnable() {
myText.setText("Farmer is a good man!");
});
}
}).start();
}
View.postDelayed(Runnable, long) 傳遞給postDelayed方法中的Runnable對象在指定的時間後執行,並且是在此
Handler所關聯的線程中執行。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mHander.postDelayed(new MyThread(), 1000);
}