Android app开发知识小结

Android知识小结

这是一个知识的总结,所以没有详解的讲解。

一.分辨率
Android中dp长度、sp字体使用、px像素、in英寸、pt英寸1/72、mm毫米

了解dp首先要知道density,density是一个抽象的单位,density值表示每英寸有多少个显示点,与分辨率是两个概念
QVGA屏density=120         QVGA(240*320)
HVGA屏density=160         HVGA(320*480)
WVGA屏density=240        WVGA(480*800)
WQVGA屏density=120      WQVGA(240*400)

在说转换系数,转换系数就是两个不同屏幕density的比例。例如:WVGA屏转QVGA屏,就是120/240。有了这个转换系数就能在不同的屏显示不的长度了。

屏幕一般可分为,状态栏,标题栏和控制区域。

当屏幕density=240时,使用hdpi 标签的资源

当屏幕density=160时,使用mdpi标签的资源

当屏幕density=120时,使用ldpi标签的资源

当屏幕density=320时,使用xhdpi标签的资源

当屏幕density=480时,使用xxhdpi标签的资源

二.Touch事件机制
    1.ViewGoup 有三个事件 onTouchEvent事件处理 dispatchTouchEvent事件分发 onInterceptTouchEvent事件拦截
    2.view  有两个事件    onTouchEvent事件处理 dispatchTouchEvent事件分发
    3.最顶层的viewGoup把事件分发到最底层的view,最底层的view通过返回值,告诉父类的view是否消耗到这个事件
    4.事实上Touch事件值响应ACTION_DOWN事件(返回true的view才是真正消耗MotionEvent事件,才会响应ACTION_UP和ACTION_MOVE)
    其他的事件分发原理是一样的
    
    当我们理解了这个事件分发的机制就能解决很多问题了。
    
    1.为什么给ListView引入了一个滑动菜单的功能,ListView就不能滚动了?
    滑动菜单的功能是通过给ListView注册了一个touch事件来实现的。如果你在onTouch方法里处理完了滑动逻辑后返回true,那么ListView本身的滚动事件就被屏蔽了,自然也就无法滑动(原理同前面例子中按钮不能点击),因此解决办法就是在onTouch方法里返回false。
    
    2.为什么图片轮播器里的图片使用Button而不用ImageView?
    图片轮播器里使用Button,主要就是因为Button是可点击的,而ImageView是不可点击的。如果想要使用ImageView,可以有两种改法。第一,在ImageView的onTouch方法里返回true,这样可以保证ACTION_DOWN之后的其它action都能得到执行,才能实现图片滚动的效果。第二,在布局文件里面给ImageView增加一个android:clickable="true"的属性,这样ImageView变成可点击的之后,即使在onTouch里返回了false,ACTION_DOWN之后的其它action也是可以得到执行的。

三.view的绘制过程

view的绘制分三步走,onMeasure,onLayout,onDraw  view的绘制首先要计算大小,然后布局坐标,最后就绘制。

1.onMeasure计算大小,有两个参数,分别是widthMeasureSpec,heightMeasureSpec这两个参数。每一个MeasureSpec有一个尺寸(s    ize)和一个模式(mode)构成,所以要对widthMeasureSpec和heightMeasureSpec做拆分。view的大小通过父类和它自己共同控制的

Mode一共有三种
    EXACTLY 父类决定子类的大小
    AT_MOST 父类限定子类的最大尺寸
    UNSPECIFIED 父类不对子类做限制,子类需要多大就多大
    2.onMeasure计算完之后,就开始布局onLayout,onLayout会返回坐标,这样就能在指定的地方绘制了,onLayout在ViewGroup使用。可以控制子view。
    
    3.onDraw就是绘制了,会返回一个画布,想画啥就画啥了。
    
    了解了view的绘制过程,就可以通过重写控件或者自定义控件,实现各种的需求。

四.Handler, Looper的理解

首先理解四个概念

Looper:不断地从MessageQueue中抽取Message执行。因此,一个MessageQueue需要一个Looper。

Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理。

Handler:处理者,负责Message的发送及处理。使用Handler时,需要实现handleMessage(Message msg)方法来对特定的Message进行处理,例如更新UI等。

MessageQueue:消息队列,用来存放Handler发送过来的消息,并按照FIFO规则执行。当然,存放Message并非实际意义的保存,而是将Message以链表的方式串联起来的,等待Looper的抽取。

Looper中的prepare方法,通过这个方法就可以在线程上创建一个Looper,如果多个Looper会抛异常。UI线程默认就有一个Looper。使用Handler的send方法就可以往消息队列放一条msg,Looper.loop()这个方法就是消息循环,有一个while循环不断去消息队列MessageQueue获取msg。通过回调Handler的dispatchMessage,dispatchMessage会给handleCallback或者handleMessage。这样就实现了线程间的通讯。

如果要详细理解,百度一下就有十分多的资料。

五.Android跨进程通讯

1.广播和Content Provider ,此处略。
2.aidl
aidl的使用,一个进程作为服务端,一个程序作为客户端。他们之间的通讯通过Service。服务端提供调用的接口,客户端绑定服务,调用服务端的方法。aidl支持普通的数据类型,其他数据类型要序列化,继承Parcelable。
3.共享UserId
android的安全机制来自于lunix,同时通过userid权限来管理的,例如root,system和普通的权限。后来也出了个SEAndroid。只要你共享了userid,不同应用之间就能通讯了。共享userid必须签名是一致。

时间: 2024-11-08 20:08:50

Android app开发知识小结的相关文章

开发Android app必备知识大分享

开发一个完整的android app需要掌握哪些知识?现在让麦子学院的android开发的老师给大家详细的介绍下android app开发需要哪些知识?大体来说,一个app从规划到终究完结需求你懂得以下几个必要方面: 1.前期需求计划与信息--你需求拟定出一个完好的需求文档,功用文档,流程图,时序图. 2.交互规划.UI规划--规划出基本且完善的原型图和app根底的交互规划作用,以后再依据这些规划出完好的UI界面并学会切图,一些需求做自适应的素材图像需求做点9patch. 这儿还需求你懂得px,

android app 程序设计思路小结

android app 程序设计思路小结 一.model设计与实现 建立业务POJO,比如user public class User{ private int userId; private String userName; public User(int userId, String userName){ this.userId = userId; this.userName = userName; } public void setUserId(int userId){ this.user

一看就懂的Android APP开发入门教程

一看就懂的Android APP开发入门教程 作者: 字体:[增加 减小] 类型:转载 这篇文章主要介绍了Android APP开发入门教程,从SDK下载.开发环境搭建.代码编写.APP打包等步骤一一讲解,非常简明的一个Android APP开发入门教程,需要的朋友可以参考下 工作中有做过手机App项目,前端和android或ios程序员配合完成整个项目的开发,开发过程中与ios程序配合基本没什么问题,而android各种机子和rom的问题很多,这也让我产生了学习android和ios程序开发的

Android APP开发笔记

环境搭建 windows系统上需要以下软件: android SDK -- app开发工具包, 开发运行环境(包括SDK管理工具,和虚拟设备管理). JDK -- java 开发工具包, 负责app代码编译运行. eclipse -- app开发集成环境, 开发app代码, 编译后在 android SDK上运行调试. ADT -- eclipse 的 android 开发工具插件, 将android SDK植入eclipse. 具体搭建步骤: Android开发环境搭建指南 本文以window

学习android app开发会很难吗?

app开发是一个新兴的技术,也是一个新兴的行业,对于学校以及学生都还是新鲜事物,在概念和课程体系上,我们都没有太多的了解,很多刚开始想学习android app开发的同学都觉得android app开发很难学,那么到底android app开发难学吗? 学习IOS平台的app需要会objective –c语言,学习android则需要java语言,反正无论选择哪个平台,追溯到最基础的层面,C或者C++的基础必须有,这也使得厦门APP开发成为了新兴而高端的课程,这样的课程要说十分好学也谈不上,如果

Android APP开发入门教程

这篇文章主要介绍了Android APP开发入门教程,从SDK下载.开发环境搭建.代码编写.APP打包等步骤一一讲解,非常简明的一个Android APP开发入门教程,需要的朋友可以参考下. 工作中有做过手机App项目,前端和android或ios程序员配合完成整个项目的开发,开发过程中与ios程序配合基本没什么问题,而android各种机子和rom的问题很多,这也让我产生了学习android和ios程序开发的兴趣.于是凌晨一点睡不着写了第一个android程序HelloAndroid,po出来

写给Android App开发人员看的Android底层知识(6)

(十一)BroadcastReceiver BroadcastReceiver,也就是广播,简称Receiver. 很多App开发人员表示,从来没用过Receiver.其实吧,对于音乐播放类App,用Service和Receiver还是蛮多的,如果你用过QQ音乐,App退到后台,音乐照样播放不会停止,这就是你写的Service在后台起作用. 在前台的Activity,点击停止按钮,就会给后台Service发送一个Receiver,通知它停止播放音乐:点击播放按钮,仍然是发送这个Receiver,

写给Android App开发人员看的Android底层知识(2)

(五)AMS 如果站在四大组件的角度来看,AMS就是Binder中的Server. AMS全称是ActivityManagerService,看字面意思是管理Activity的,但其实四大组件都归它管.估计是Android底层开发人员先写了ActivityManagerService用来管理Activity,后来写Service.Receiver.CP的时候发现代码都差不多,于是就全都用ActivityManagerService,但是却忘记改名字了——我也是猜的,纯属八卦. 由此而说到了插件化

Android Studio配置 AndroidAnnotations——Hi_博客 Android App 开发笔记

以前用Eclicps 用习惯了现在 想学学 用Android Studio 两天的钻研终于 在我电脑上装了一个Android Studio 并完成了AndroidAnnotations 的配置. AndroidAnnotations是一个能够让你快速进行Android开发的开源框架,它能让你专注于真正重要的地方.使代码更加精简,使项目更加容易维护,它的目标就是“Fast Android Development.Easy maintainance”. 说白了 就是可以少写很多代码,哈哈. Andr