Fragment:::Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视。针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后拷贝一份,修改布局以适应平板神马超级大屏的。莫非无法做到一个App可以同时适应手机和平板么,当然了,必须有啊。Fragment的出现就是为了解决这样的问题。你可以把Fragment当成Activity的一个界面的一个组成部分,甚至Activity的界面可以完全有不同的Fragment组成,更帅气的是Fragment拥有本人的生命周期和接收、处理用户的事件,这样就不必在Activity写一堆控件的事件处理的代码了。更为重要的是,你可以动态的添加、替换和移除某个Fragment。Fragment必须是依存与Activity而存在的,因此Activity的生命周期会直接影响到Fragment的生命周期。
问一下HTTP协议传输和TCP协议传输的区别?:::
TCP/IP
主要的作用就是保证连接的可靠性,本人不管发出任何东西给你,都要有这一套协议来保证不丢包
例如说TCP协议就是这样,无论上层让他传啥数据,他都通过与IP协议的操作,把这些东西分段,然后输送,同时保证在这个过程中,数据不会丢,假如丢了一块,他还得想办法重新传一次。这就是TCP、IP的意义
另外,HTTP协议,可以认为主要是用来访问网页的,
是比TCP更上层的协议,http里面规定了我们访问网页的时候怎么样进行缓存,以及请求什么格式。等等,主要是为了让人们访问网页的时候更快,更安全,而规定了很多参数。
Android之Activity的四种启动模式
1. Standard模式(默认)
我们平时直接创建的Activity都是这种模式的Activity,这种模式的Activity的特点是:只要你创建了Activity实例,一旦激活该Activity,则会向任务栈中加入新创建的实例,退出Activity则会在任务栈中销毁该实例。
2. SingleTop模式
这种模式会考虑当前要激活的Activity实例在任务栈中能否正处于栈顶,假如处于栈顶则无需重新创建新的实例,会重用已存在的实例,否则会在任务栈中创建新的实例。
3. SingleTask模式
假如任务栈中存在该模式的Activity实例,则把栈中该实例以上的Activity实例全部移除,调用该实例的newInstance()方法重用该Activity,使该实例处於栈顶位置,否则就重新创建一个新的Activity实例。
4. SingleInstance模式
当该模式Activity实例在任务栈中创建后,只要该实例还在任务栈中,即只要激活的是该类型的Activity,都会通过调用实例的newInstance()方法重用该Activity,此时使用的都是同一个Activity实例,它都会处于任务栈的栈顶。此模式一般用于加载较慢的,比较耗性能且不需要每次都重新创建的Activity。
介绍下XML和JSON:::
XML解析:
XML是一种标记语言,很相似HTML
XML的设计宗旨是传输数据,而非显示数据
XML标签没有被预定义。您需要自行定义标签。
XML被设计为具有自本人描述性。
XML是W3C的推荐标准
简单说,XML就是一种数据的描述语言,虽然它是语言,但是通常情况下,它并不具备常见语言的基本功能——被计算机识别并运行。只有依靠另一种语言,来解释它,使它达到你想要的效果或被计算机所接受
XML是不作为的。XML不会做任何事情。XML被设计用来结构化、存储以及传输信息。XML仅仅是纯文本,XML允许自定义标签,XML不是对HTML的替代是对HTML的补充。
解析:首先需要找到对应的节点,然后从节点开始解析当使用XML解析器将XML数据解析出来之后。需要将这些数据提取出来,也是通过连续2层提取,将数据定位到每个video, 将每个video里的数据传递给SearchVideoInfo这个ArrayList,然后将ArrayList中的数据和对应的Adapter数据关联起来
JSON:JavaScript对象表示法(JavaScript Object Notation), 是一种轻量级的数据交换格式, 易于人阅读和编写, 同时也易于机器解析和生成。
JSON是存储和交换文本信息的语法,相似XML。
XUtils:
xUtils 包含了很多实用的android工具。
xUtils 源于Afinal框架,对Afinal进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持,拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响…
xUitls最低兼容android 2.2 (api level 8)
目前xUtils主要有四大模块:
DbUtils模块:
android中的orm框架,一行代码就可以进行增删改查;
支持事务,默认关闭;
可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);
支持绑定外键,保存实体时外键关联实体自动保存或更新;
自动加载外键关联实体,支持延时加载;
支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。
ViewUtils模块:
android中的ioc框架,完全注解方式就可以进行UI绑定和事件绑定;
新的事件绑定方式,使用混淆工具混淆后仍可正常工作;
目前支持常用的11种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。
HttpUtils模块:
支持同步,异步方式的请求;
支持大文件上传,上传大文件不会oom;
支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD请求;
下载支持301/302重定向,支持设置能否根据Content-Disposition重命名下载的文件;
返回文本内容的GET请求支持缓存,可设置默认过期时间和针对当前请求的过期时间。
BitmapUtils模块:
加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象;
支持加载网络图片和本地图片;
内存管理使用lru算法,更好的管理bitmap内存;
可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等…
下拉刷新最主要的流程是:
(1). 下拉,显示提示头部界面(HeaderView),这个过程提示用户”下拉刷新”
(2). 下拉到一定程度,超出了刷新最基本的下拉界限,我们认为达到了刷新的条件,提示用户可以”松手刷新”了,效果上允许用户继续下拉
(3). 用户松手,可能用户下拉远远不止提示头部界面,所以这一步,先反弹回仅显示提示头部界面,然后提示用户”正在加载”。
(4). 加载完成后,隐藏提示头部界面。
实现步骤:
第一步:既然是要显示listview ,那么就应该有个listview 的容器pulldown.xml
第二步:自定义一个listview中显示的item对象pulldown_item.xml
第三步:定义一个header的xml布局文件pulldown_header.xml
第四步:假如需要向上拉更新更多的话,那就定义一个底部的footer的布局文件,在此为方便起见,只定义一个progressbar跟textview,更加复杂的显示,就交给你们pulldown_footer.xml
第五步:重写listview这个文件主要任务是提供触摸的事件的处理方法。
第六步:下拉刷新控件,真正实现下拉刷新的是这个控件,而上面的那个ScrollOverListView只是提供触摸的事件等
listView优化:一般使用的时候会用到以下两种:convertView 复用历史缓存的view对象
findViewByid 减少findViewByid的次数 原因是他是一个相对比较耗性能的操作
这两种是最一般的优化 一般使用listView的时候都会用到 当listView对象中有图片资源的时候就会占用大量内存 很容易造成内存溢出 这是用来优化的方法有两种 分批加载和分页加载
分批加载可以通过修改SQL语句来实现
分页加载 :要先实现一个借口OnScrollListener 重写onScrollStateChanged和onScroll方法 onScroll实现滑动后处理检查能否还有新纪录 假如有 调用addFooterView添加记录到adapter 然后adapter调用notifyDataSetChanged更新数据 假如没有新纪录 就把自定义的mFooterView去掉 使用onScrollStateChanged可以检测能否滚到最后一行且停止滚动然后执行加载
图片异步加载的方法::
1:先从内存缓存中获取图片显示(内存缓冲)
2:获取不到的话就从SD卡里获取(SD卡缓冲 把从SD卡获取图片放到子线程里进行 不然会不够流畅)
3:都获取不到的话从网络下载图片并保存到SD卡同时加入内存并显示
listView图片错位:显示前加以判断 可见则显示 不可见则不显示
问一下HTTP协议传输和TCP协议传输的区别?:::
TCP/IP
主要的作用就是保证连接的可靠性,本人不管发出任何东西给你,都要有这一套协议来保证不丢包
例如说TCP协议就是这样,无论上层让他传啥数据,他都通过与IP协议的操作,把这些东西分段,然后输送,同时保证在这个过程中,数据不会丢,假如丢了一块,他还得想办法重新传一次。这就是TCP、IP的意义
另外,HTTP协议,可以认为主要是用来访问网页的,
是比TCP更上层的协议,http里面规定了我们访问网页的时候怎么样进行缓存,以及请求什么格式。等等,主要是为了让人们访问网页的时候更快,更安全,而规定了很多参数。
Android之Activity的四种启动模式
1. Standard模式(默认)
我们平时直接创建的Activity都是这种模式的Activity,这种模式的Activity的特点是:只要你创建了Activity实例,一旦激活该Activity,则会向任务栈中加入新创建的实例,退出Activity则会在任务栈中销毁该实例。
2. SingleTop模式
这种模式会考虑当前要激活的Activity实例在任务栈中能否正处于栈顶,假如处于栈顶则无需重新创建新的实例,会重用已存在的实例,否则会在任务栈中创建新的实例。
3. SingleTask模式
假如任务栈中存在该模式的Activity实例,则把栈中该实例以上的Activity实例全部移除,调用该实例的newInstance()方法重用该Activity,使该实例处於栈顶位置,否则就重新创建一个新的Activity实例。
4. SingleInstance模式
当该模式Activity实例在任务栈中创建后,只要该实例还在任务栈中,即只要激活的是该类型的Activity,都会通过调用实例的newInstance()方法重用该Activity,此时使用的都是同一个Activity实例,它都会处于任务栈的栈顶。此模式一般用于加载较慢的,比较耗性能且不需要每次都重新创建的Activity。
介绍下XML和JSON:::
XML解析:
XML是一种标记语言,很相似HTML
XML的设计宗旨是传输数据,而非显示数据
XML标签没有被预定义。您需要自行定义标签。
XML被设计为具有自本人描述性。
XML是W3C的推荐标准
简单说,XML就是一种数据的描述语言,虽然它是语言,但是通常情况下,它并不具备常见语言的基本功能——被计算机识别并运行。只有依靠另一种语言,来解释它,使它达到你想要的效果或被计算机所接受
XML是不作为的。XML不会做任何事情。XML被设计用来结构化、存储以及传输信息。XML仅仅是纯文本,XML允许自定义标签,XML不是对HTML的替代是对HTML的补充。
解析:首先需要找到对应的节点,然后从节点开始解析当使用XML解析器将XML数据解析出来之后。需要将这些数据提取出来,也是通过连续2层提取,将数据定位到每个video, 将每个video里的数据传递给SearchVideoInfo这个ArrayList,然后将ArrayList中的数据和对应的Adapter数据关联起来
JSON:JavaScript对象表示法(JavaScript Object Notation), 是一种轻量级的数据交换格式, 易于人阅读和编写, 同时也易于机器解析和生成。
JSON是存储和交换文本信息的语法,相似XML。
XUtils:
xUtils 包含了很多实用的android工具。
xUtils 源于Afinal框架,对Afinal进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持,拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响…
xUitls最低兼容android 2.2 (api level 8)
目前xUtils主要有四大模块:
DbUtils模块:
android中的orm框架,一行代码就可以进行增删改查;
支持事务,默认关闭;
可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);
支持绑定外键,保存实体时外键关联实体自动保存或更新;
自动加载外键关联实体,支持延时加载;
支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。
ViewUtils模块:
android中的ioc框架,完全注解方式就可以进行UI绑定和事件绑定;
新的事件绑定方式,使用混淆工具混淆后仍可正常工作;
目前支持常用的11种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。
HttpUtils模块:
支持同步,异步方式的请求;
支持大文件上传,上传大文件不会oom;
支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD请求;
下载支持301/302重定向,支持设置能否根据Content-Disposition重命名下载的文件;
返回文本内容的GET请求支持缓存,可设置默认过期时间和针对当前请求的过期时间。
BitmapUtils模块:
加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象;
支持加载网络图片和本地图片;
内存管理使用lru算法,更好的管理bitmap内存;
可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等…
下拉刷新最主要的流程是:
(1). 下拉,显示提示头部界面(HeaderView),这个过程提示用户”下拉刷新”
(2). 下拉到一定程度,超出了刷新最基本的下拉界限,我们认为达到了刷新的条件,提示用户可以”松手刷新”了,效果上允许用户继续下拉
(3). 用户松手,可能用户下拉远远不止提示头部界面,所以这一步,先反弹回仅显示提示头部界面,然后提示用户”正在加载”。
(4). 加载完成后,隐藏提示头部界面。
实现步骤:
第一步:既然是要显示listview ,那么就应该有个listview 的容器pulldown.xml
第二步:自定义一个listview中显示的item对象pulldown_item.xml
第三步:定义一个header的xml布局文件pulldown_header.xml
第四步:假如需要向上拉更新更多的话,那就定义一个底部的footer的布局文件,在此为方便起见,只定义一个progressbar跟textview,更加复杂的显示,就交给你们pulldown_footer.xml
第五步:重写listview这个文件主要任务是提供触摸的事件的处理方法。
第六步:下拉刷新控件,真正实现下拉刷新的是这个控件,而上面的那个ScrollOverListView只是提供触摸的事件等
listView优化:一般使用的时候会用到以下两种:convertView 复用历史缓存的view对象
findViewByid 减少findViewByid的次数 原因是他是一个相对比较耗性能的操作
这两种是最一般的优化 一般使用listView的时候都会用到 当listView对象中有图片资源的时候就会占用大量内存 很容易造成内存溢出 这是用来优化的方法有两种 分批加载和分页加载
分批加载可以通过修改SQL语句来实现
分页加载 :要先实现一个借口OnScrollListener 重写onScrollStateChanged和onScroll方法 onScroll实现滑动后处理检查能否还有新纪录 假如有 调用addFooterView添加记录到adapter 然后adapter调用notifyDataSetChanged更新数据 假如没有新纪录 就把自定义的mFooterView去掉 使用onScrollStateChanged可以检测能否滚到最后一行且停止滚动然后执行加载
图片异步加载的方法::
1:先从内存缓存中获取图片显示(内存缓冲)
2:获取不到的话就从SD卡里获取(SD卡缓冲 把从SD卡获取图片放到子线程里进行 不然会不够流畅)
3:都获取不到的话从网络下载图片并保存到SD卡同时加入内存并显示
listView图片错位:显示前加以判断 可见则显示 不可见则不显示
解决方案
21