Android常用

待解决知识点

Git从头到尾运用一遍(动手)

1、            在GitHub创建一个新的应用

2、            在as的Terminal中输入

A、           git init

B、            git commit –u””

C、            git remote addorigin 后面加github项目地址

D、           创建分支git branch 分支名(查看分支指令相同)

E、            切换分支git checkout

F、             添加修改代码带分支git add –A,git commit –u””

G、           合并指定分支的代码到现在的分支git  meger “分支”

H、           Git push origin 分支名

屏幕适配  dpi(像素密度) 、px(像素)、pid()

屏幕分辨率:屏幕上像素点的点数,一个像素点=ipx.如1960*1080(横竖的像素点                    个数)

屏幕的尺寸:如常见的4.0 4.7 5.0 5.2寸等。指的是英寸, 1英寸=2.54厘米

屏幕像素密度:单位dpi,是指屏幕中每一英寸中的像素点数,和分辨率和尺寸有                            关,在一般情况下:屏幕尺寸越小而像素点越多那么像素密度                              就越高反之就越低(160作为基准)

dp、dip、px、sp、dpi:

Dp和dip 本质上是没有区别的,android中一般情况是规定以160dpi为基准1dp = 1px 如果密度为320dpi那么1dp=2px

在屏幕上画一个320px的线,那么他会根据屏幕的分辨率(如480*720: 320除以480 占频幕2/3)来确定长度,也就是说用px是与屏幕的大小的比例来确定长度

如果以pd为但会来画这条线。在一般情况下(android规定的160dpi)那么160dp就会占满整个屏幕(dp计算的是与每一英寸中的像素点的比例来计算长度),如果是320dpi的密度那么这掉线就是屏幕的一半

Ps:计算方式和dp类似,它是生命文字大小的御用单位

总以上(px画线与整个屏幕的分辨率有关,dp画线与屏幕密度有关。都是计算比例来确定的长度)

 

android常见的像素密度范围(android规定的是160dpi)

mdpi:120dpi--160dpi(极小的)

hdpi:160dpi-240dpi(一般的密度)

Xhdpi: 240dpi-320dpi(1.5倍密度)

Xxhdpi:320dpi-480dpi(2倍密度)

Xxxhdpi:480dpi--640dpi(3倍密度)

屏幕适配:

1、布局中多用weight(权重)分配宽度

2、多用RaltiveLayout来确定位置

3、多用拉伸图(.9图),UI提供或shap

4、把布局中的文字劲量写在values中用sp

5、图片设置ScaleType属性                      centerCrop/fitCenter/fitXY

6、Mainifast中设置支持各种屏幕密度

<supports-screens

Android:smallscreens=”true”

Android:normscreens=”true”

Android:largescreens=”true”

Android:xlargescreens=”true”

/>

 

 

 

6.0权限(查资料)()

Api < 23:android在api小于23的时候会默认添加了所有Mainifast中声明的权限,                            但是也有意外的时候,如用户在手机设置中关闭了权限、用户在安装app                         时禁止了权限授予。

Api >=23(6.0及以上)发生以上的情况我们可以通过权限处理解决

解决方案(api >=23):在每一个要用权限的地方都先判断我们是否拥有这个权限,                                             如果没有就去申请是否打开(用户可能不愿意开启这个权限),                                             如果有再执行后面的相关操作。

判断是否拥有某个权:ContextCompat.checkSeIfpermission(this,Mainifast.permission.权限)                                             ==PackageManage.PERMISSION.GRANTED返回一个boolean如果为                                       false表示没有这个权限或被禁止(就需要申请开启),true表示已经                                            拥有这个权限,可以进行下一步的操作

申请开启某个权限:当判断当期没有个个权限的时候需要手动去申请开启这个权限,

ActivityCompat.requestPermissions(this,new String[]{Mainifast.permission.权限},请求码)

对应的onRequestPermissionResult()方法中汇体现出用户师傅同意申请或拒绝申请

1.判断请求码是否和申请时相同。

i.          grantResult[0] ==PackageManage.PERMISSION.GRANTED(用户同意了权限申请)

ii.        否则为用户拒绝了申请

 

 

 

第三方框架Fresco/okhttp/xutils/volley优缺点(看资料)

1.xutils一个比较全面的第三方框架其中有,DButils、ViewUtils、HttpUtils、BitmapUtils.

a)        Dbutils--操作数据库时可以一句代码进行增删查改

b)       Viewutils--用注解的方式可以很方便进行实践绑定

c)        httpUtils--同步、异步请求。支持大数据下载且几乎不会出现OOM(内存溢出)的情况,设置过期时间和默认过期时间

d)       bitmapUtils--可以配置加载线程的数量各缓存大小路径

e)        有个别的人表示在使用bitmaputils时还是会出现oom

2.volley 是google在2013年IO大会发布的新的网络通讯矿建

优点:可以指定优先级,取消单个请求或者某一个区域中的请求。框架容易被制定。

确定:不支持https(如果一定要使用必须要活的证书)

3.Fresco是常用的图片处理框架

在加载图片过程的前期会显示一个占位图,当正常的图片加载完成后取消并释放内存

移除屏幕的图片会被释放减少内存的占用,避免出现oom

可以先加载一个模糊的图片等待清晰图加载完成之后把模糊图释放,缩略图,旋转、缩放

4.okhttp:支持get/post请求方式。支持取消单个请求、自定义callback返回下载进度

 

分享、登录、定位集成流程(笔写)

Umeng分享:

1、                 Umeng官网开注册账号,开发者中心创建应用,得到APPKEY

2、                 根据集成文档配置Activitymanifast文件

A、           根据文档添加ShareActivity

B、            添加meta配置appkey

3、                 配置权限(6.0--api23)

4、                 添加权限

5、                 添加最新的V4包(android studio可以不用配置)

6、                 根据需求添加包(腾讯的(open_sdk),QQ空间(SocialSDK_QQZone_3))

7、                 在Application中初始化各个平台的配置

8、                 登录腾讯开发者平台,注册账号创建应用拿到(appkey和appSecret)第7步需要使用

9、                 在activity中调用ShareAction()进行分享

登录:(配置信息和分享的一样)

1、            在activity中声明得到umShareAPI=UMShareAPI.get(this);

2、            通过umShareAPI.doOauthVerify()登录到QQ

AIDL(代码)

1.      编写一个user.aidl文件(内容以接口的形式写,interface)

2.      Build ->Makeproject

3.      定义一个Service 在当中定义一个内部类继承user(user.Stub),实现这个aidl的接口中定义的方法.

4.      在service 的Ibind方法中return 内部类的匿名对象

5.      在Activity中定义一个对象类型为aidl的名字(如callback

6.      在Activity中Intent跳转Service(不是真的跳转知识声明intent= new Intent(this,MyService.class))

7.      在activity中通过bindService(intent,newServiceConnect,BING_AOTO_CREATE)绑定一个Service

8.      在ServiceConnection的onServiceConnected方法中callback =MyAIDL.Stud.asInterface(iBind);

9.      通过callback可以拿到Service中继承aidl接口实现的方法穿的参数(有点类似回调)

HttpUrlConnection(代码)

简单的下载一个图片加载到imageView中:

1.通过一个URL对象得到一个HttpUrlConnection(conn = url.openConnection())

2.通过conn得到一个输入流conn.getInputSream()

3.通过bitmap工厂得到一个bitmap对象(bitmap=BitmapFactory.decodesream(inputSream))

4.通过setImageBitmap(bitmap)(这样就完成了一个简单的从网上加载图片到ImageView中)

 

Socket编程(看代码回顾)

1、            客户端socket需要IP、端口号

2、            服务器端ServiceSicket定义一个端口号

3、            ServiceSocket通过Accept方法一直监听是否有客户端连接

4、            开启线程进行通讯(通过流传输)

开发模式mvp、mvvm(查资料)

MVC:model,View,Controller(数据,布局或控件,Activity)

         作用Controller作为调度者使model和View之间没有直接的沟通,确保责任的分离(只改mvc中的其中一个另外的两层不需要做修改,方便调试)

MVP:Model ,View,presenter

      Presenter()作为中间纽带处理与用户交互的逻辑

 MVP模式:

  • View不直接与Model交互,而是通过与Presenter交互来与Model间接交互
  • Presenter与View的交互是通过接口来进行的,更有利于添加单元测试
  • 通常View与Presenter是一对一的,但复杂的View可能绑定多个Presenter来处理逻辑     

     MVC模式:

  • View可以与Model直接交互
  • Controller是基于行为的,并且可以被多个View共享
  • 可以负责决定显示哪个View

MVVM:

Model基本业务逻辑

View 显示内容

ViewModel将前面两者联系在一起的对象

 

一个ViewModel接口提供了两个东西:动作和数据。动作改变Model的下层(click listener,监听文字改变的listener等等),而数据则是Model的内容。

比如,为一个拍卖页面服务的ViewModel可能被作为数据呈现:item里的一张图片,标题,描述,价格。也可能作为动作呈现:投标,购买或者联系卖家。

 

自定义View(举例写过的例子-笔写)

1.      SideBar(a.b.c.d.e.f)

2.      带下拉刷新的ListView

流程:自定义一个类继承view实现三个构造方法(一个参数的:new 的时候调用,二两参数的:在布局中加载的时候调用,三个参数:有自定义属性的时候调用)

 

把Web的流程复习一遍(笔写)

JNI/NDK查看资料(代码、笔写)

JNI:java Nativeinterface 是一个用来连接java和C++、C等接口的方式

NDK:NativeDevelopment Kit 编写调试JNI的工具

混淆、签名、加固(回顾、写代码)

混淆:

签名:

加固:邦邦、爱加密、(都需要的是release包)

通知栏、推送、(代码)

通知栏:

1、 声明Notification 和NotificationManager对象

2、 NotificationManager =context.getSystemService(Context.NOTIFICATION_SERVICE)

(注:大多数带Manager的对象都是通过Context.getSystemService得到的)

 

3、 通过NotificationCompat.Built builder = newNotificationCompat.Builder(context)

4、 Builder.setContentText().setContentTitle()……..设置属性

5、 初始化notification = builder.build()

6、 设置notification的flags

7、 通过notificationManager开启通知栏和关闭通知栏(notify()开启,cancel()取消)

8、 可以实现一个PendingIntent对象用来做意图跳转(参数中有一个Intent)

WebView练习一遍(代码)

支付功能、人脸识别(查资料、代码)

支付:

       微信支付:

1、 客户端提交支付商品清单到服务器

2、 服务器提交到微信支付服务器

3、 微信生成预付清单返回给服务器

4、 服务器进行加密人后返回给客户端(加密的原因:安全防止在支付过程中被修改信息)

5、 客户端跳转微信支付页面进行支付

6、 微信返回支付状况给客户端和服务器(两个都会收到信息进行比较验证)

支付宝:

1、客户端提交清单到服务器

 

人脸识别(年龄、性别等):使用Face++  SDK

1、通过intent跳转到手机相册选择图片

2、把选择的图片转化成bitmap类型,把bitmap转成byte数组

3、调用Face++的请求方法把byte数组作为参数传入

4、返回一个JSON数据,解析数据得到人脸位置,人物性别,人物年龄等

 

百度地图至少做出路线、搜索(代码)

Service、ContentProvider、BroadCastPerfrence(代码)

Android优化总结(笔写)

 

即时通讯(代码)

了解蓝牙、wifi

Fragment懒加载

getSupproFragmentManage.findFragmentById()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值