網絡服務
Apache HTTP Client
bug少,但是佔內存大。
使用網絡需要加權限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
在maniest 文件中加上。
如果UI線程處理所有事件,會阻塞程序,導致掛起狀態,如網絡請求或者數據庫查詢,
因此Android 的單線程模式必須遵守兩條規則:
- 不要阻塞 UI 線程
- 不要在 UI 線程之外訪問 Android UI 工具包
public void onClick(View v) {
new Thread(new Runnable() {
public void run() {
Bitmap b = loadImageFromNetwork("http://example.com/image.png");
mImageView.setImageBitmap(b);
}
}).start();
}
違反了規則2,UI線程外訪問UI工具包,imageView。爲解決此問題,Android 提供了幾種途徑來從其他線程訪問 UI 線程。以下列出了幾種有用的方法:
Activity.runOnUiThread(Runnable)
View.post(Runnable)
View.postDelayed(Runnable, long)
AsyncTask 允許對用戶界面執行異步操作。它會先阻塞工作線程中的操作,然後在 UI 線程中發佈結果,而無需您親自處理線程和/或處理程序。
Progress 後臺任務執行的百分比。
Result 後臺執行任務最終返回的結果,比如String。
要使用它,必須創建 AsyncTask 子類並實現 doInBackground() 回調方法,該方法將在後臺線程池中運行。要更新 UI,必須實現 onPostExecute() 以傳遞 doInBackground() 返回的結果並在 UI 線程中運行,這樣,您即可安全更新 UI。稍後,您可以通過從 UI 線程調用 execute() 來運行任務。