碎片( Fragment)java
第4章 看得挺頭疼,沒弄明白,不寫了。多線程
第8章 多媒體,例子不少。異步
對於像我同樣的初學者來講,這書入門挺好,建議購買,網上也有此書每章的源碼。ide
文章都不是寫的很詳細,就寫點要點,防止本身忘記。oop
粗看比較快,在看書中的天氣實例。 碼雲weatherSimple,後續有空會寫實例步驟。線程
java的多線程就不介紹了code
Android 不容許在子線程中進行UI操做對象
因此Android提供了異步消息處理機制繼承
異步消息,應該有哪些組成?隊列
public class MainActivity extends Activity implements OnClickListener { public static final int UPDATE_TEXT = 1; private TextView text; private Button changeText; private Handler handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case UPDATE_TEXT: // 在這裏能夠進行UI操做 text.setText("Nice to meet you"); break; default: break; } } }; …… @Override public void onClick(View v) { switch (v.getId()) { case R.id.change_text: new Thread(new Runnable() { @Override public void run() { Message message = new Message(); message.what = UPDATE_TEXT; handler.sendMessage(message); // 將Message對象發送出去 } }).start(); break; default: break; } } }
使用方法 繼承AsyncTask
class DownloadTask extends AsyncTask<Void, Integer, Boolean> { …… }
而後啓動 new DownloadTask().execute();
四個能夠重寫的方法:
class DownloadTask extends AsyncTask<Void, Integer, Boolean> { @Override protected void onPreExecute() { progressDialog.show(); // 顯示進度對話框 } @Override protected Boolean doInBackground(Void... params) { try { while (true) { int downloadPercent = doDownload(); // 這是一個虛構的方法 publishProgress(downloadPercent); if (downloadPercent >= 100) { break; } } } catch (Exception e) { return false; } return true; } @Override protected void onProgressUpdate(Integer... values) { // 在這裏更新下載進度 progressDialog.setMessage("Downloaded " + values[0] + "%"); } @Override protected void onPostExecute(Boolean result) { progressDialog.dismiss(); // 關閉進度對話框 // 在這裏提示下載結果 if (result) { Toast.makeText(context, "Download succeeded", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(context, " Download failed", Toast.LENGTH_SHORT).show(); } } }