说说遗留的问题
碎片( Fragment)
第4章 看得挺头疼,没弄明白,不写了。
第8章 多媒体,例子很多。
对于像我一样的初学者来说,这书入门挺好,建议购买,网上也有此书每章的源码。
文章都不是写的很详细,就写点要点,防止自己忘记。
后面的问题
粗看比较快,在看书中的天气实例。 码云weatherSimple,后续有空会写实例步骤。
多线程
java的多线程就不介绍了
Handler
Android 不允许在子线程中进行UI操作
所以Android提供了异步消息处理机制
异步消息,应该有哪些组成?
- 消息 Message
- 处理消息 Handler
- 消息队列 MessageQueue
- 管理消息队列 Looper
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
使用方法 继承AsyncTask
class DownloadTask extends AsyncTask<Void, Integer, Boolean> {
……
}
然后启动 new DownloadTask().execute();
四个可以重写的方法:
- onPreExecute() 前执行
- doInBackground(Params...) 执行中,不可以对UI进行操作 ,但可以 publishProgress()来切换到UI 线程
- onProgressUpdate(Progress...) 执行中,可以对UI进行操作
- onPostExecute(Result) 执行完后
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();
}
}
}