1. token的理解 2. 服务器通过soecket推送数据给客户端。 3. git与svn的区别 4. 开发问题及难点,如何解决 5. Aidl开发步骤 6. 数据通信 7. git命令 ? adb命令 8. android 事件分发机制 9. Android ?binder原理 10. 图片性能优化 11. tcp 3次握手,4次挥手 12. list ?map ?set各自的特点及区别 13. http协议相关 14 . 滑动事件冲突解决方法 15. 自定义view 16. 组件之间的几种数据通信方式 17. Fragmen与activity组合在一起时的生命周期 18. 开发模式MVC和MVVM 19. IntenService和Service的区别 20. Http在弱网络下的优化 21. Sqlite插入大批量数据时如何提高性能 22. Activity view ?window之间的关系 23. Eventbus ?传递数据方式 24. RecycleView和ListView的区别 25.handler ?为啥会引起内存泄露 26.aidl 27.蓝牙开发步骤 28.自定义view的优化 29. 屏幕适配 30.android ?UI的优化 31.线程池的创建 32.大图片的适配 33.图片性能优化 34.混淆 35.多渠道打包 36. 37. 38. 39. 40. 41.
25. 内部内持有外部内的引用,messagequen持有message,message持有handler,handler ?持有activity
26. 支持的基本数据类型除了short 其它都支持,还有map和list,这2个里面的所有元素都是aidl支持的元素之一 in. 客服端数据对象流向服务端,并且服务端不能修改客户端数据 out.服务端数据对象流向客户端,客户端传递到服务端的数据对象为空,服务端可以修改客户端数据,并传递给客户端 inout.以上都行
27. 开启蓝牙,扫描蓝牙,配对蓝牙,连接蓝牙,数据通信
28. 一:降低刷新频率 减少不必要调用invalidate()方法来频繁调用onDraw()方法。有可能的,调用四种参数不同类型的invalidate()方法,只需刷新指定部分的view,而调用无参变量需要刷新整个view。 另外一个非常耗时的操作是请求layout。任何时候执行requestLayout(),会使得Android UI系统去遍历整个View的层级来计算出每一个view的大小。如果找到有冲突的值,它会需要重新计算好几次。 ?如果你有一个复杂的UI,你应该写一个自定义的ViewGroup类来表现它的布局。与内置的view不同,自定义的view可以使得程序仅仅测量这一部分,这避免了遍历整个view的层级结构来计算大小。 二.使用硬件加速 三.初始化时创建对象;不要在onDraw方法内创建绘制对象,一般都在构造函数里面初始化对象; 四.状态的存储与恢复:如果内存不足,而恰好我们的Activity置于后台,不幸被重启,或者用户旋转屏幕造成Activity重启,我们的View应该也能尽可能的去保存自己的属性。onSaveInstanceState()和onRestoreInstanceState()方法中存取
29. 一、Android屏幕适配的发展 ??1、dp直接适配 ??2、宽高限定符适配 ??3、UI适配框架Autolayout 二、目前最好的适配方案 ??1、SmallestWidth适配(sw限定符适配) ??2、今日头条适配方案 ??3、AutoSize
30. 一.相对布局比线性布局节点少 二.重用布局文件<include> 三.merge标签使用 merge标签是作为include标签的一种辅助扩展来使用,它的主要作用是为了防止在引用布局文件时产生多余的布局嵌套。 四.viewstub标签: viewstub是view的子类。他是一个轻量级View, 隐藏的,没有尺寸的View。GONE viewstub常用来引入那些默认不会显示,只在特殊情况下显示的布局,如进度布局、网络失败显示的刷新布局、信息出错出现的提示布局等。 五.ConstaintLayout布局使用 ? ? 复杂布局层级会大大减少
31.
ExecutorService是线程池的一个服务,可以随时关闭线程池,是继承Executor的。Executors是个工厂类,专门创建各种线程池。 Android常用的线程池有以下几种,在Executors里面对应的方法: ①. newFixedThreadPool 创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。 ②. newCachedThreadPool 创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。对于执行很多短期异步任务的程序而言,这些线程池通常可提高程序性能。 ③. newSingleThreadExecutor 创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程。 ④.newScheduledThreadPool? -调度型线程池? -这个池子里的线程可以按schedule依次delay执行,或周期执行
32. 比如确定图片要在屏幕上显示的宽度 如果知道图片的宽高比,则图片要显示的高度也确定了,这时可以自定义imageview,在onMessure方法中确定图片要显示的尺寸大小
33. ①降低图片的质量 ②缩放图片的尺寸 ③图片的三级缓存
34. ①对于Android APP来说四大组件和Application不能混淆 ②避免混淆JSON类的构造函数,因为json转换用到了java反射 ③注解不能混淆,因为注解也用到了java反射 ④泛型不能混淆 ⑤避免混淆自定义控件类的get/set方法和构造函数 ⑥java内部类的混淆需要注意,如果会被外部调用到,那么也不能混淆 ⑦不混淆任何包含native方法的,否则找不到本地方法。 ⑧避免混淆js相关的接口 ⑨避免混淆枚举类 ⑩避免混淆序列化类 ?避免混淆第三方SDK ?避免混淆第三方框架 ?避免混淆属性动画兼容库 ?避免混淆Rxjava/RxAndroid ?避免混淆实体类
35. AS 自带多渠道打包: 在清单文件中配置meta-data (name ?value 值)然后在gradle ?文件中android ?下面添加ProductFlavors ?不同的渠道包,最后在根目录下进行命令编译。
8.事件分发机制: 1.事件流程是从Activity---->ViewGroup--->View从上往下调用dispathcTouchEvent方法,一直到子节点View的时候,如果没有组件处理任何事情,再由View---->ViewGroup----->Activity从下往上调用onToutchEvent方法。 2.dispathTouchEvent和onTounchEvent 一旦retrue true ,事件就停止传递了(没有谁再能收到这个事件) 3.disapatchTouchEvent 和 onToutchEvent ?retrue false的时候事件都回传给父控件的onToutchEvent处理 viewGroup拥有这3个方法 activity 和view 没有拦截方法。 dispatchTouchEvent :处在链首,用于分发事件,该方法决定是由当前view自己的onToutch来处理,还是分发给子View ,让子View递归调用其自身的dispatchTouchEvent来处理 onInterceptTouchEvent:是用来拦截事件的,当父控件下发事件给子控件进行拦截处理的时候,如果子控件需要对事件进行处理,就要在OnInterceptTouchEvent方法中进行拦截,然后到子控件的onTouchEvent方法中进行事件的监听以及逻辑的判断。 onTouchEvent:用于处理传递到View的手势事件。
11. SYN 表示建立连接, FIN 表示关闭连接, ACK 表示响应, PSH 表示有 DATA数据传输, RST 表示连接重置。 三次握手 目的是为了通信双方建立连接。 第 1 次握手 客户端发送连接标识 SYN 给服务器端 第 2 次握手 服务器端接收到消息,返回 ACK+SYN(响应标识+连接标识) 第 3 次握手 客户端发送响应标识 ACK 给服务器端 三次握手之后客户端和服务端正式建立连接。
四次挥手 目的是为了通信双方断开连接。 过程是: 第 1 次挥手 客户端发送连接标识 FIN 给服务器端 第 2 次挥手 服务器端接收到消息,返回 ACK 响应 给客户端说明收到消息了,但这时候服务器端还未处理完其它报文数据所以还需要第三次挥手 第 3 次挥手 当服务器端处理完其它报文数据后,返回 FIN给客户端, 第 4 次挥手 客户端接收到消息,返回 ACK 响应 给服务器端 四次挥手之后客户端和服务端正式断开连接。
15:自定义View 自定义View最基本的3个方法是:onMeasure()、onLayout()、onDraw(). View在Activty中显示出来,要经历测量,布局,绘制3个操作。 onMeasure():决定view的大小 ?onLayout():决定view在viewGroup中的位置 onDraw():决定绘制View 自定义控件又分为自定义view 和自定义ViewGroup ?自定义view只需要重写onMeasure()和onDraw()即可,而自定义viewGroup则只需要重写onMeasure()和onLayout()? onMeasure() 测量模式: EXACTLY:精确模式 ? 自定义View是不能超过父View的大小 AT_MOST:最大模式 ? 父View给自定义View确定了一个范围,在这个范围内,自定义view的大小是给出的具体的值,比如 width =100dp,height=200dp,但是如果给出的任何一个数值超过了父View的限制值,他最大是父View的限制值 UNSPECIFLED:不确定模式 父View没有对自定义控件做任何限制,想多大就多大,可以超过父View的大小
16. 数据通信: ? Activity与Activity通过intent和bunder传递数据(单向通信),也可通过Broadcastreceiver双向通信 activity与fragment之间的通信可以通过 构造函数单向通信,或者获取Fragment实例对象进行双向通信,或者接口回调
Fragmen与Fragment间可以通过获取fragment实例调用相应方法,或者通过依附的activity接口回调,或者eventbus
18:MVVM开发模式 M:modle ?数据模型层,获取业务数据模型 V:Veiw ? ?定义了界面中的布局和外观 ViewModel ?逻辑控制层,负责处理数据和处理View层中的业务逻辑
23:activty:Android四大组件之一,是开发者最常用的一个组件 Window:是一个抽象类,具有窗口管理的功能,实现类为PhoneWindow View:提供对View的操作,包括绘制测量等。 他们三个之间的关系便是Activity类通过window组装View对象,然后把组装出来的对象交给系统去绘制 首先,在写Activity的时候,会重写系统提供的OnCreat方法,然后调用setContentView来绑定页面布局.setContnetView主要功能由window类来实现的。window的实现类是PhoneWindow.PhoneWindow的SetContentView会做2件事:1,安装DecorView 2.把Actvity传递进来的resId加载进DecorView的content内。
24.RecyclerView和ListView的区别 RecyclerView可以完成ListView,GridView的效果,还可以完成瀑布流的效果。同时还可以设置列表的滚动方向(垂直或者水平); RecyclerView中view的复用不需要开发者自己写代码,系统已经帮封装完成了。 RecyclerView可以进行局部刷新。 RecyclerView提供了API来实现item的动画效果。
svn是集中式版本控制系统,git是分布式版本控制系统。? 这句话相信不知道多少人都听过,究竟什么是集中式什么是分布式?很明显嘛,就字面意思啊,这么来说吧,svn就是所有人修改的都是服务器上的程序,如果有人修改了同样的部分,那就冲突了。所以呢,一般团队会约定,对于公共部分的程序,尽量标注出开发人员特有标识,又或者A从上添加,B从下添加。 ? git就是开发人员创建自己的分支,这个分支就相当于将源码copy一份在本机上,之后修改的都是本地的代码,可随时拉取服务器的代码进行同步,git可创建无数分支,开发人员只需将自己修改的代码提交就可以了,这样冲突的几率会小很多。
svn是直接与服务器进行交互,git是将项目缓存在本地再推送到服务器。 svn必须在联网的情况下工作,git可不联网开发。 svn易冲突,git不易冲突。 svn旨在项目管理,git旨在代码管理。 svn适用于多项目并行开发,git适用于单项目开发。 svn适用于企业内部,由项目经理协调多个项目统筹开发,git适用于通过网络多人开发同一项目。
21. 在事务里面进行数据批量插入
5.0新特性中的悬浮控件:FloatingActionButton
微信分享: 在微信官网申请appid,下载sdk ?jar包,依赖到项目中去 使用WXWebpageObject类型写入分享内容,图片 ,标题,url链接? 然后根据flag标记分享到朋友圈还是微信好友
tabpagerindicator 结合viewpager 使用 1:首先layout 配置viewpager 和tabpagerindicator 2:创建FragmentPagerAdapter ?viewpager设置适配器给FragmentPagerAdapter ,tabpagerIndicator设置viewpger,fragmentPagerAdapter重写3个方法,getCount getItem,getPageTitle 构造器中创建fragment 3:在样式表 中配置下划线样式 ,选中背景色, 标题有图片时使用IconpageAdapter
viewpager 无限循环滚动: 设置getCount()的值最大,在instantiateItem方法中position赋值为posiiton%viewpager总数,如果position小于0,则赋值为条目数+1,并且判断如果view已经在之前添加到了一个父组件,就移除此view
http协议的5大模型: 应用层:为应用软件提供很多服务,构建与tcp协议之上,屏蔽了网络传输的相关细节 传输层:向用户提供可靠的端到端的服务,传输层通过封装向高层屏蔽了下层数据通信的细节 网络层:为数据节点之间传输创建逻辑链路 数据链路层: 在通信的实体间建立数据链路链接? 物理层:定义物理设备之间如何传输数据
ijkplayer播放器遇到的问题 一:弱网络下如何优化 ? 1.缓冲区设计:视屏数据传入缓冲区,发送者从缓冲区获取数据进行发送,这样就形成了一个异步的生产者消费模式。生产者只需要将采集、编码后的音视频数据推送到缓冲区,而消费者负责从这个缓冲区里面取出数据发送。 2 .丢帧处理:在检测到网络变差的时候,丢弃非关键帧,需要注意一个地方,如果丢弃P帧(非关键帧),那么需要将2个关键帧之间的所有非关键帧丢弃,否则会产生马赛克 3。降码率:在差网络环境下可以实时改变硬编的码率。 二:播放卡顿 ? 设置asynctask线程的优先级,之前是后台线程,设置为URGENT优先级 三:
|