碎片( 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(); } } }