Android 基础理论 day02
来源:互联网 发布:python微信公众号爬虫 编辑:程序博客网 时间:2024/04/27 22:52
1. Command设计模式
图形编程 图形库
一个按钮的强大:登录,注册,CRUD....体现出灵活性与扩展性,其实就是耦合度低.
1.1. 耦合度低
比方:手机与电池
1.2. 接口interface
接口引用可以降低耦合度
案例:GoodDao
1.3. 图形库Button模拟示意
使用Command设计模式开发一个按钮步骤 。低耦合在开发图形控件 command设计模式/菜单
开发要点
1.申明接口
On....Listenerpublic static interface OnClickListener {public void onClick(View view); }2.控件内部申明接口引用
//低耦合引用
private OnClickListener listener;public void setOnListener(OnClickListener listener) {this.listener = listener; }
3.系统调用
...if (this.listener != null) { this.listener.onClick(view); }....
调用方式
MyButton login = new MyButton();login.setOnListener(new OnClickListener() {@Overridepublic void onClick(View view) {// 登录System.out.println("登录1000");}});MyButton register = new MyButton();register.setOnListener(new OnClickListener() {@Overridepublic void onClick(View view) {// 注册...System.out.println("注册1000");}});// 系统调用login.work(null);register.work(null);
2. 回调CallBack函数
2.1. 理解
比方:你妈在炒菜(耗时),你到同学家打游戏,你写了一个函数(菜做好了打电话)
异步概念:你会等菜做好吗?煲个汤要3个小时!!!此时分头行动
callback函数在微软的官方手册中是这样定义callback函数的:“callback函数是由应用程序
定义而由操作系统调用的函数”。
这里有两点需要注意:
第一点,我们写回调函数不是给自己调用的,而是准备给系统在将来某一时刻调用的;
第二点,一般的函数,都是你自己去调用。 而callback函数是由系统调用的。我们应该知道系统在什么情形下会调用我们写的回调函数。
在Android开发中有两种方式
1.AsyncTask2.Thread+Handler//ANR Application not response用户无响应异常 卡某段代码比较耗时代码用以上方法进行处理<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
2.2. Android的回调
如:四大组件的学习
##########学习关键点:着重掌握回调函数的条件
<span style="color:#330033;">public class MyActivity extends Activity {// 当Activity被创建的时候调用// 条件:创建@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// findViewById// setOn...}// 当Activity被销毁的时候调用@Overrideprotected void onDestroy() {super.onDestroy();}}</span>
经验:
1.组件 extends 组件名
2.生命周期/回调方法
3.对应标签进行注册
2.3. AsyncHttpClient
封装了Http与线程
Get
String url = "http://192.168.10.100:8080/web/";// 创建客户端类AsyncHttpClient client = new AsyncHttpClient();// get请求 非阻塞/异步client.get(url, // 路径new AsyncHttpResponseHandler() {//回调函数:条件:请求失败的情况下@Overridepublic void onFailure(int resCode, Header[] header, byte[] result, Throwable e) {super.onFailure(resCode, header, result, e);resultText.setText("请求失败");}//回调函数:条件:请求成功的情况下 200 主线程:可以直接操作控件@Overridepublic void onSuccess(int resCode, Header[] header, byte[] result) {super.onSuccess(resCode, header, result);try {String res=new String(result,"UTF-8");resultText.setText(res);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}} }// 响应处理类);
Post
// 创建客户端类AsyncHttpClient client = new AsyncHttpClient();// 创建表单RequestParams params = new RequestParams();params.put("username", userName);params.put("password", password);// post请求 非阻塞/异步client.post(url, // 路径params,// 表单new AsyncHttpResponseHandler() } );<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
文件上传
// 创建客户端类AsyncHttpClient client = new AsyncHttpClient();// 创建表单RequestParams params = new RequestParams();params.put("filename", "文件名");params.put("filedes", "文件描述");try {params.put("formfile", new File(filePath));} catch (FileNotFoundException e1) {e1.printStackTrace();}// post请求 非阻塞/异步client.post...
AsyncHttpResponseHandler的事件处理需要在回调方法里面
2.4. WebView
案例:载入html的帮助说明
载入html代码
resultWebView.loadData(res,//网页源代码html内容"text/html",//多媒体类型"UTF-8"//编码);载入网址
// 载入网址resultWebView.loadUrl("http://192.168.10.100:8080/");
2.4.1. 修改WebView载入行为
WebViewClient 主要帮助WebView处理各种通知、请求事件的
// 修改行为 不要打开系统浏览器,而是把内容显示在当WebViewresultWebView.setWebViewClient(new WebViewClient() {// 条件:开始载入网页@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {super.onPageStarted(view, url, favicon);dialog = new ProgressDialog(WebViewActivity1.this);dialog.setTitle("传智浏览器 提示");dialog.setMessage("正在拼命加载中...");// 开始dialog.show();}// 条件:结束载入网页@Overridepublic void onPageFinished(WebView view, String url) {super.onPageFinished(view, url);// 关闭dialog.dismiss(); }});
经验:1.改变属性 set 2.重写回调方法 (android)
2.4.2. 显示载入进度
WebChromeClient主要辅助WebView处理Javascript的对话框、网站图标、网站title、加载进度等比如
// 设置WebChromeClient实例resultWebView.setWebChromeClient(new WebChromeClient() {// 回调函数:条件:只要进度发生改 就调用@Overridepublic void onProgressChanged(WebView view, int newProgress// 最新进度) {System.out.println("onProgressChanged newProgress= " + newProgress);if (newProgress < 100) {if (mProgressBar.getVisibility() != View.VISIBLE) {mProgressBar.setVisibility(View.VISIBLE);}mProgressBar.setProgress(newProgress);} else {mProgressBar.setVisibility(View.GONE);mProgressBar.setProgress(0);}super.onProgressChanged(view, newProgress);} });
2.5. AsyncTask
比方:洗衣服
案例:短信备份
开发要点:
l 如果项目里面遇到卡可以使用AsynTask优化耗时代码
l 线程 new Thread().start() 所 new AsynTask().execute();!!!
new AsyncTask<Void, Integer, // 进度的类型Void>() {// 任务开始前@Overrideprotected void onPreExecute() {super.onPreExecute();...显示 }// 任务执行中.@Overrideprotected Void doInBackground(Void... params) {for (int i = 1; i <= number; i++) {if (!isRunning) {return null;}System.out.println("当前备份第" + i + "/" + number + "条");// 发布进度publishProgress(i);try {Thread.sleep(300);} catch (InterruptedException e) {e.printStackTrace();}}return null;}// 任务完成@Overrideprotected void onPostExecute(Void result) {super.onPostExecute(result);if (isRunning) {mProgressBar.setVisibility(View.INVISIBLE);status.setText("备份完成 本次备份" + number + "条");} else {status.setText("备份被取消");}} // 回调函数 进度变化时被调用 条件:publisProgress();@Overrideprotected void onProgressUpdate(Integer... values) {super.onProgressUpdate(values);mProgressBar.setProgress(values[0]);status.setText("当前备份第" + values[0] + "/" + number + "条");} }.execute();
- Android 基础理论 day02
- Android-Day02
- Android-day02
- Android 基础理论 day01
- 02 Android基础理论
- Android学习day02
- [Android开发学习] day02
- Android Day02 --java基础
- Android Day02 知识点
- 初学android开发--day02
- Android studio Day02-1
- Android Studio Day02-2
- Android网络编程:基础理论汇总
- DAY02
- DAY02
- day02
- day02
- day02
- netlink中用到的结构体和宏
- Group and sum array of hashes by date
- CentOS 防火墙开启80端口
- NYOJ-264 国王的魔镜
- 香港中文大学某门研究生课程的课程提纲
- Android 基础理论 day02
- WPF自定义Popup和弹出菜单
- 以后不用在担心机密泄露了,io技术帮你分割文件,只有懂技术的你,懂得如何看文件
- 静态导入import static ....
- Array to hash with multiple keys
- hdu4526威威猫系列故事——拼车记
- Marvell的数字娱乐--基于ARMADA 1500的Marvell平台
- 设置UITableView是否可以滚动
- Marvell的强大、高效的处理器