您的位置:首页 > 其它

<疯狂Andorid讲义> 阅读笔记(1)

2016-07-18 16:20 169 查看
Android运行时由两部分组成:安卓核心库集和Dalvik虚拟机。其中核心库集提供了java语言核心库所能使用的绝大部分功能,而虚拟机则负责运行安卓应用程序。
Android运行时和JRE有点类似,JRE包括JVM和其他功能函数库,而此处的Android运行时,则包括Dalvik虚拟机和核心库集。
Dalvik并未遵守JVM规范,两者也不兼容,实际上,JVM虚拟机运行的是java字节码,但Davlvik运行的是其专有的dex文件,JVM直接从class文件或JAR包中加载字节码然后运行,而Davlik则无法直接从class文件或jar包中加载字节码,它需要通过DX工具将应用程序的所有class文件直接编译成dex文件,Davlik则运行该dex文件。
Dalvik虚拟机,不需要很快的CPU计算速度和大量的内存控件,它主要有如下两个特点:
1、运行专有的dex文件,专有的dex文件减少了class文件中的冗余信息,而且会把所有class文件整合到一个文件中,从而提高运行性能;而且DX工具还会对dex文件进行一些性能的优化。
2、基于寄存器实现。大多数虚拟机包括JVM都是基于栈的,而Davlik虚拟机则是基于寄存器的。一般来说,基于寄存器的虚拟机具有更好的性能表现,但在硬件通用性上略差。
Davlik虚拟机依赖于Linux内核提供的核心功能,如线程和底层内存管理。

Android Debug Bridge (ADB)的用法
ADB是一个功能非常强大的工具,它位于SDK安装目录的platform-tools子目录下,ADB工具既可完成模拟器文件与电脑文件的相互复制,也可以安装APK应用,甚至可以直接切换到安卓系统中执行Linux命令。
1、查看当前运行的模拟器。2、电脑与模拟器之间文件的相互复制。3、启动模拟器的shell窗口。4、安装、卸载APK程序。

使用Android assert packing tools 打包将当前目录下asserts 子目录,res子目录,Androidmainfest.xml文件都打包到bin\res,ap_资源包中。

应用程序权限说明
1、声明该应用自身所拥有的权限
2、声明调用该应用自身所需的权限
通过为应用的各组件元素,如<activity../>元素添加<uses-permission../>子元素即可生命调用该程序所需的权限。例如在<activity../>元素里添加如下代码。

activity是安卓应用中负责与用户交互的组件,activity只能通过setContenteView(View)来显示指定组件。
实际上,activity是window的容器,activity包含一个getWindow()方法,该方法返回该activity所包含的窗口,对于activity而言,开发者一般不需要关心window对象。
activity为安卓应用提供了可视化用户界面,如果该安卓应用需要多个用户界面,那么这个安卓应用将会包含多个activity,多个activity组成activity栈,当前活动的activity位于栈顶。

service与activity的地位并列,它也代表一个单独的安卓组件。service与activity的区别在于:service通常位于后台运行,它一般不需要与用户交互,因此service组件没有图形用户界面。

BroadcastReceiver是安卓应用中另一个重要的组件,顾名思义,BroadcastReceiver代表广播消息接收器。从代码实现角度来看,BroadcastReceiver非常类似誉事件编程中的监听器,与普通事件监听器不同的是:普通事件监听器监听的事件源是程序中的对象;而BroadcastReceiver监听的事件源是安卓应用中的其他组件。
使用BroadcastReceiver子类,并重写onReceive(Context context,Intent intent)方法即可。当其他组件通过sendBroadcast,sendStickyBroadcast()或sendOrderBroadcast()方法发送广播消息时,如该BroadcastReceiver也对该消息感兴趣(通过IntentFilter配置),BroadcastReceiver的onReceive方法也会被触发。

Intent和IntentFilter
严格地说,Intent并不是安卓应用的组件,但它对于安卓应用的作用非常大—它是安卓应用内不同组件之间通信的载体。当安卓运行时需要连接不同的组件时,通常就需要借助于Intent来实现。
显式Intent:显式Intent明确指定需要启动或者触发的组件的名称。
隐式Intent:隐式Intent只是明确指定需要启动或者触发的组件应满足怎样的条件。

安卓应用的绝大部分UI组件都放在android.widget包及其子包、android.view包及其子包中,安卓应用的所有UI组件都继承了View类。

android:gravity是对元素本身说的,元素本身的文本显示在什么地方靠着换个属性设置,不过不设置默认是在左侧的。

android:layout_gravity是相对与它的父元素说的,说明元素显示在父元素的什么位置

Viewgroup继承了View类,当然也可以当成普通View类来使用,但Viewgroup主要还要当成容器类使用。但由于ViewGroup是一个抽象类,因此实际使用中通常总是使用ViewGroup的子类来作为容器,例如各种布局管理器。
ViewGroup容器控制其子组件的分布依赖于ViewGroup.layoutParams、ViewGroup.MarginLayoutParams两个内部类。这两个内部类中都提供了一些xml属性。
match_parent与fill_parent属性完全相同,但从安卓2.2开始就推荐使用这个属性值来代替fill_parent。
wrap_content:指定子组件的大小恰好能包裹它的内容即可。

android:gravity属性中的多个属性值之间用竖线隔开,但竖线前后千万不能出现空格。

帧布局由Framelayout所代表,Framelayout直接继承了ViewGroup组件。帧布局容器为每个加入其中的组件创建一个空白的区域(称为一帧),所有每个子组件占据一帧,这些帧都会根据gravity属性执行自动对齐。

relativelayout  
android:ignoregravity:设置哪个组件不受gravity影响 

px(像素):每个px对应屏幕上的一个点。
dip或dp(设备独立像素):一种基于屏幕密度的抽象单位。在每英寸160点的显示器上,1dip=1px。但随着屏幕密度的改变,dip与px的换算会发生改变。
sp(比例像素):主要处理字体的大小,可以根据用户的字体大小首选项进行缩放。

Textvie属性:是否将复合指定格式的文本转换为可单击的超链接形式。

为了实现只缩放图片中某个部分的效果,我们需要借助于9patch图片来实现,9patch图片是一种特殊的PNG图片。它在原始图片四周各添加一个宽度为1像素的线条。
左侧和上侧的直线共同决定了图片的缩放区域:以左边直线为左边界绘制矩形,它覆盖的区域可以在纵向缩放:以上面直线为上边界绘制矩形,它覆盖的区域可以水平缩放:它们二者的交集可以在两个方向上缩放。
右侧和下侧的直线共同决定了图片的内容显示区域。以右边直线为右边界绘制矩形,以下边直线为下边界绘制矩形。

ToggleButton(状态开关按钮)是由Button派生出来。
DigitalClock显示数字时钟,AnalogClock显示模拟时钟。
setAdjustViewBounds 设置imageView是否调整自己的边界来保持所显示图片的长宽比。

AutocompleteTextView(自动完成文本框)
从edittext派生而出。当用户输入一定字符之后,自动完成文本框会显示一个下拉菜单,供用户从中选择,当用户选择某个菜单项之后,AutocompleteTextView按用户选择自动填写该文本框。

setCompletionHint 设置出现在下拉菜单中的提示标题。
setThreshold 设置用户至少输入几个字符后才会提示。

Spinner列表选择框
如果开发者使用spinner时可以确定下拉列表框里的列表项,则完全不需要编写代码,只要为spinner指定entries属性即可实现一个下拉列表框。

Tab(选项卡)的功能和用法
Tab可以很方便地在窗口上防止多个标签页,每个标签页相当于获得一个与外部容器相同大小的组件摆放区域。通过这种方式,可以在一个容器里防止更多组件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: