Android UI?基础:四层系统架构的掌握和理解、环境的搭建、View常用属性和常用控件、界面布局、Style的作用及基本用法、Android常用资源;
1、android五种基本布局:线性LinearLayout、相对RelativeLayout、帧布局FrameLayout、绝对布局AbsoluteLayout、表格布局TableLayout;
2、单位:
dip:device?independent?pixels(设备独立像素),不依赖像素,不同设备有不同显示效果,与设备硬件有关;
px:pixels(像素),不同设备显示效果相同,HVGA代表320x480像素;
pt:point,标准的长度单位,1pt=1/72英寸,用于印刷业;
sp:scaled?pixels(放大像素),用于字体显示,TextView默认使用sp。
3、MVC模式:
模型层Model:对数据库、网络的操作都应该在model里面处理,对业务计算等操作也是必须放在该层的;
视图层View:一般采用XML文件进行界面的描述;
控制层controller:Activity实现了这个职责;不要在activity中写代码,要通过activity交割model业务逻辑层处理,因为activity的响应时间只有5s;
4、android中有3种菜单:
(1)选项菜单Options?menus:一个Activity只能有1个选项菜单,在按下menu键时,显示在屏幕下方;
(2)上下文菜单Context?menus:为Activity中的任何一个视图注册一个上下文菜单,长按时出现;
(3)弹出式菜单Popup?menus:依赖于Activity中的某个视图。
5、Android系统架构:应用程序层、应用程序框架层、系统运行库层、Linux核心层;
6、log打印:Android.util.log常用方法5个:VERBOSE、DEBUG、INFO、WARN、ERROR
Log.v:黑色,verbose(啰嗦);
Log.d:蓝色,debug(调试);.
Log.i:绿色,information(提示性的信息);
Log.w:橙色,warning(警告),需要我们这注意优化android的代码;
Log.e:红色,error(错误),需要认真分析,查找栈的信息;
7、资源目录:
res/anim/?用来放置动画
res/xml/?用来放置style?theme等XML定义
res/raw/?用来放置data数据
res/drawable?存放png、jpg等图标文件,或自定义drawable
res/layout?存放xml界面文件
res/values?存放使用到的各种类型数据
8、构造对话框
AlertDialog.Builder db = new Builder(this); db.create().show();
PregressDialog pDialog = new ProgressDialog(context);
9、Android系统的5大不足
(1)安全和隐私;
(2)首先开卖Android手机的不是最大的运营商;
(3)运营商仍然能够影响到Android手机;
(4)同类机型用户减少;
(5)过分依赖开发商,缺少标准配置;
Android系统的5大优势:
(1)开放性;
(2)挣脱运营商的束缚;
(3)丰富的硬件选择;
(4)不受任何限制的开发商;
(5)无缝结合的Google应用;
10、ListView的优化方案:
(1)如果自定义适配器,那么在getView方法中要考虑方法传进来的参数contentView是否为null,如果为null,就创建contentView并返回,如果不为null,则直接使用。在这个方法中尽可能少创建view;
(2)给contentView设置tag(setTag()),传入一个viewHolder对象,用于缓存要显示的数据,可以达到图像数据异步加载的效果;
(3)如果listView需要显示的item很多,就要考虑分页加载。比如一共显示100条或者更多的时候,可以先加载20条,等用户拉到列表底部的时候再去加载接下来的20条;
11、列表显示需要3个元素:
(1)ListView:用来显示列表的View;
(2)适配器:用来把数据映射到ListView的中介;
(1)数据源:具体的将被映射的字符串、图片、或者基本组件;
?
Java核心:java面向对象编程的核心、常用API---Java Web编程以及JavaSE核心内容,特别是IO和多线程;初步具备面向对象设计和编程的能力;掌握基本的JVM优化策略。
1、java虚拟机采用“自适应”的垃圾回收技术,有两种回收方式:
(1)“停止-复制”:先暂停程序的运行,将存活的对象从当前堆复制到另一个堆,没有复制的全是垃圾。被复制到新堆上的对象是一个挨着一个的,保持紧凑排列。就可以按前述方法简单、直接的分配内存了。这将导致大量内存复制行为,内存分配是以较大的“块”为单位的。有了块之后,垃圾回收器就可以不往堆里拷贝对象了,直接就可以往废弃的块里拷贝对象了。
(2)“标记-清除”:它的思路同样是从堆栈和静态存储区出发,遍历所有的引用,进而找出所有存活的对象,每当它找到一个存活对象,就会给对象一个标记。这个过程中不会回收任何对象,只有全部标记完成时,没有标记的对象将被释放,不会发生任何复制工作,所以剩下的堆空间是不连续的,然后垃圾回收器重新整理剩余的对象,使他们是连续排列的。
2、JNI的调用过程:
(1)安装和下载Cygwin,下载Android NDK;
(2)在NDK项目中进行JNI接口的设计;
(3)使用C/C++实现本地方法;
(4)JNI生成动态链接库.so文件;
(5)将动态链接库复制到Java工程,在Java工程中调用,运行Java工程即可。
3、ArrayList、Vector、LinkedList:
(1)ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接按序号索引元素,但是插入元素要涉及数组元素等内存操作,所以索引数据快而插入数据慢;
(2)Vector由于使用了synchronized方法(线程安全),性能上较ArryList差;
(3)LinkedList使用双向链表实现存储,按序号索引数据,需要进行向前或向后便利,但插入数据时,只需要记录本项的前后项即可,所以插入速度较快;
4、HashMap和HashTable的区别:
(1)HashMap是HashTable的轻量级实现(非线程安全的实现),都实现了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于HashTable;
(2)HashMap允许将null作为一个entry的key或者value,二HashTable不允许;
(3)HashMap把HashTable的contains方法去掉了,改成containsKey和containsValue;HashTable继承自Dictionary类,而HashMap是Java1.2引进的一个Map?interface实现;
(4)最大的不同是,HashTable的方法是Synchronize的,而HashMap不是,在多个线程访问HashTable时,不需要自己为它的方法实现同步,而HashMap必须为之提供外同步;
(5)采用的hash/rehash算法大概一样,所以性能不会有很大的差异。
5、与(&)和短路与(&&)、或(|)和短路或(||)的区别:
&&(逻辑与),全真才为真;||(逻辑或),有真则为真;
使用短路与,只要第一个结果为false,则结果为false,不会继续执行下去;如果不是短路与,第一个结果为false,仍然继续执行下面的判断;
6、构造函数:与类同名、没有返回值、没有return语句;
7、“==”和equals的区别:
“==”比较两个变量的值是否相等,也就是变量对应内存中存储的数值是否相同,比较基本数据类型的数据或两个引用变量是否相等,用“==”;
equals用于比较两个独立对象的内容是否相同;
8、方法的重写Overriding和重载Overloading:是java多态性的不同表现
重写Overriding:是父类与子类之间多态性的一种表现,子类可以重写(覆盖)父类的方法
重载Overloading:是一个类中多态性的一种表现,一个类中定义多个同名的方法,或有不同的参数个数或不同的参数类型。
9、面向对象的特征:
封装:
继承:
多态:
10、静态变量和实例变量:
静态变量:在内存中只有1份,所有实例共享该变量,可以用具体实例加.来引用,也可以直接类名加.来引用;
实例变量:随实例不同可以不同,在别的类中只能先实例化,再用具体实例加.来调用;
11、final、finally、finalize
final:final修饰的类不能不继承,final修饰的方法不能被覆盖,final修饰的字段为常量;
finally:异常处理中来执行任何清除操作;
finalize:做必要的清理工作;
12、接口和抽象类的区别:
一个类可以实现多个接口,只能继承一个抽象类;
抽象类可以有构造方法,接口不能有构造方法;
抽象类可以有普通成员变量,接口不能有普通成员变量;
抽象类中可以包含静态方法,接口不能包含静态方法;
?
Android应用核心组件:四大组件(Activity、Service、BroadcastReceiver、ContentProvider)、Activity生命周期及页面跳转传值、启动模式、Intent七大属性A
1、Activity的生命状态:
Active/Running:处于屏幕最上层,系统堆栈的最顶端;
Paused:失去焦点但还看得到画面;
Stopped:被完全遮蔽;
Inactive:被杀死时,会从activity栈中移除;
2、Activity的启动模式:
standard:每次都会实例化
singleTop:复用栈顶元素
singleInstance:独占1个task,且只有一个activity
singleTask:栈内复用,清除其上的元素
3、Android的四大组件:
Activity:是android程序与用户交互的窗口,保持各界面状态,做很多持久化的事情,管理生命周期及一些跳转逻辑;
Service:后台
Content Provider:是Android提供的第三方应用数据的访问方案
Broadcast Receiver:广播接收器
4、URI:
是ContentResolver和ContentProvider进行数据交换的标识;
URI的标准前缀:以“content://”为前缀;
URI的authority部分:完整的类名(小写的形式);
URI的path部分(资源部分、数据部分):用于决定哪类数据被请求
5、GC内存泄露的情况:
数据库的cursor没有关闭;
Bitmap对象不使用时采用recycle释放;
Activity中对象的生命周期大于Activity的生命周期;
没有使用contentView;
?
Android消息机制:Android?通过Looper、Handler来实现消息循环机制;Android的消息循环是针对线程的,每个线程都可以有自己的消息队列和消息循环;Looper负责管理线程的消息队列和消息循环;通过Looper.myLooper()得到当前线程的Looper对象,通过Looper.getMainLooper()得到当前进程主线程的Looper对象。
1、Handler、Looper
Looper:一个线程可以产生一个Looper对象,来管理此线程里的MessageQueue(消息队列);
Handler:构造Handler对象,来与Looper沟通,以便push新消息到MessageQueue中,或者接收Looper从MessageQueue取出送来的消息;
MessageQueue:用来存放线程放入的消息;
线程:主线程,Android启动程序时会替它建立一个MessageQueue;
2、sleep()和wait()的区别
sleep:是线程类(Thread)的方法,使此线程暂停指定时间,把执行机会给其他线程,但监控状态依然保持,到时会自动恢复,不会释放对象锁;
wait:是Object类的方法,导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify火灾notifyAll方法后,本线程才获得对象锁进入运行状态;
3、Android进程的重要程度由高到低:
前台进程 > 可见进程 > 服务进程 > 后台进程 > 空进程
?
Android异步操作:Android提供了一个工具类AsyncTask(异步执行任务),处理后台比较耗时的任务,不再需要子线程和Handler就可以完成异步操作并且刷新用户界面
1、Android处理耗时操作的方式有哪些
AsyncTask、Handler、Thread、Loaders
2、AsyncTask定义了3种泛型类型
AsyncTask是抽象类,定义了3种泛型类型:Params、Progress、Result
3、Handler的主要用途
确定在将来的某个时间点执行一个或者一些Message和Runnable对象;
在其他线程中排入一些要执行的动作;
4、AsyncTask作用:
开发过程中,要用多线程来进行操作,将耗时的操作放在单独的线程中执行,避免占用主线程给用户带来不好的体验;但在子线程中无法操作主线程,因此用Handler类在子线程中更新UI线程,用发消息的机制更新UI界面,呈现给用户;但耗时的任务会启动一些匿名的子线程,太多的子线程给系统带来巨大的负担,随之带来一些性能问题;因此用一个工具类AsyncTask,来出来一些后台的耗时任务,不需要子线程和Handler就可以完成异步操作,并且刷新用户界面。
?
Android核心:高级UI的使用和定制、Android视图系统和核心实践处理、派发机制、绘图原理和高级控件动画的使用、广播接收器、联系人提供程序、短信技术、电话技术、Android设备各种传感器的使用
1、广播的注册方式:
静态注册:在清单文件中声明,是常驻型,当应用程序关闭后,如果有信息广播来到,程序也会被系统调用自动运行;
动态注册:使用代码进行注册,不是常驻型,跟随程序的生命周期;
数据存储:对存储空间及文件存储的掌握、SD卡存储、Sharedpreferences存储、数据库SQLite存储技术等
1、Android只有一种轻量级数据库,就是SQLite;
2、Preference、File、DataBase这3种存储方式的存储路径:
Preference:/data/data/包名/Shared_Prefs
File:/data/data/包名/files
DataBase:/data/data/包名/database
网络:Socket、HTTP、TCP/IP、UDP等各种网络协议的特点和使用方法的掌握、了解基于局域网点对点通信、掌握网络请求方式和乱码处理、掌握常见的数据交换格式XML和
JSON、熟悉各种解析方式
1、json和xml的优缺点比较
流行度方面,xml被广泛使用,json才刚刚开始;
json和xml同样拥有丰富的解析手段;
json相对于xml来讲,数据的体积小;
json与javascript的交互更加方便;
2、Socket通信编程中,客户端的编程步骤是:
创建客户端套接字(指定服务器端IP地址与端口号);
连接(Android创建Socket时会自动连接);
与服务器端进行通信;
关闭套接字;
3、Socket通信编程中,服务器端的编程步骤是:
创建一个ServerSocket,用于监听客户端Socket的连接请求;
采用循环不断接收来自客户端的请求;
每当接收到客户端Socket的请求,服务器端也对应产生一个Socket;
4、JSON解析类有哪些:
JSONObject、JSONStringer、JSONArray、JSONTokener、JSONException
5、XML解析方式:SAX、DOM、Pull
?
Android高级技术:LBS相关技术、第三方分享、推送、OpenFile框架和XMPP协议等
1、Android代码优化技术:java内存控制、循环使用、图片优化
?
?
由于固态驱动器(SSD)的速度比传统的硬盘驱动器(HDD)快得多,并且价格越来越便宜...
本文实例为大家分享了javascript实现倒计时提示框的具体代码,供大家参考,具体...
MFC项目在vs2017编译正常无报错,但是升级vs2019后一打开项目就报如下错误。 项...
今天看到个不错的网页播放器,感觉不错,大家可以测试 我写的一个播放器网页: ...
本文实例为大家分享了vue实现按钮切换图片的具体代码,供大家参考,具体内容如下...
这5个PHP编程中的不良习惯,一定要改掉 PHP世界上最好的语言! 测试循环前数组是...
目录 1. C语言文件接口(库函数) 1.1 fopen 1.2 fclose 1.3 fread 1.4 fwrite 1.5...
在大三的时候,一直就想搭建属于自己的一个博客,但由于各种原因,最终都不了了...
首先到这里下载其源码。里面东西挺多的,我们基本上可以把它放到两个文件夹就是...
目录 读者基础 ?微服务架构梳理 https://www.coder4.com/homs_online/ ? ? 读者...