#Andorid简介
##描述
Google 的Andy Rubin把Android描述为:
为移动设备设计的第一个真正开放的综合平台,包含操作系统,用户界面和应用程序--所有软件都能运行在手机上,从而消除移动创新的障碍.
##Android SDK的特征
-
访问硬件(包括摄像头,GPS,传感器)
-
使用wifi,蓝牙技术和NGC进行数据传输
-
地图,地理编码和基于位置的服务
-
使用SQLite数据库进行数据存储和检索
-
共享数据和应用程序间通讯
-
使用Widget和Live Wallpaper增强主屏幕
-
广泛的媒体支持和2D/3D图形
-
Cloud to Device Messaging
C2DM为开发人员提供了一种根据服务器推送出,创建事件驱动应用程序的有效机制
-
优化的内存和进程管理
##开发框架简介 Android应用程序使用Java作为编程语言进行编写,但不是用传统的Java虚拟机执行,而是用一个定制的称为Dalvik的虚拟机执行.
每个Android应用程序都运行在它自己的Dalvik实例的一个进程中,它把内存管理和进程管理的所有工作都交给Android运行时进行处理,Android运行时最爱必要的时候会暂停和结束进程,从而更有效地管理资源.
Dalvik和Android运行时位于一个Linux内核之上,由于该Linux内核来处理低级的硬件交互,包括驱动程序和内存管理,同时有一套API来提供所有对底层服务,功能和硬件的访问.
###Android软件栈
简单地说,ANdroid软件栈就是通过一个应用程序提供一个Linux内核和一个C/C++库集合,而该应用程序为运行时和应用程序提供服务,并对它们举行管理.
-
Linux内核
核心服务(包括引荐驱动程序,进程和内存管理,安全,网络和电源管理)都由一个Linux2.6内核树立.内核还在引荐和软件栈的其他部分之间提供了一个抽象层
-
库
在内核之上,Android包含了中C/C++和辛苦(例如libc和SSL),以及一些其他类型的库
-
Android运行时
Android运行时可以然一个Android手机从本质上与一个移动Linux实现区分开来.由于Android运行时包含了和辛苦和Dalvik虚拟机,因此,它是向应用程序提供动力的引擎,它和库一起形成了应用程序框架的基础.
-
核心库
虽然Android应用程序开发使用的是Java语言,但Dalvik并不是一个Java 虚拟机.Android核心库提供了Java和辛苦以及Android特定库可用的大部分功能.
-
Dalvik虚拟机
Dalvik是一个基于寄存器的虚拟机,它已经被优化从而确保一个设备可以高效地运行多个实例.他依赖Linux内核进行线程和底层内存管理.
-
-
应用程序框架
应用程序框架提供了用来创建Android应用程序的类.它还对硬件访问提供了一般抽象,并管理用户界面和应用程序资源.
-
应用层
所有的应用程序,包括原生的和第三方的,都在应用层上使用相同的库进行构建.应用层运行在Android运行时内,并且使用了应用程序框架中可用的类和服务
#使用Android模拟器的技巧
Eclipse选择AVD时会同时考虑程序使用的Android版本和minSdkVersion属性的设置值,当存在运行AVD时选用运行AVD。
把实体手机或平板电脑当成模拟器
- 安装USB驱动
- 将手机或平板电脑以USB连接到PC
- 设置》应用程序 启动调试相关功能
- 启动Eclipse,切换到DDMS界面,在左上的Devices窗口显示特殊模拟器就是实体手机或平板电脑
- 运行项目,则程序就会安装到实体设备中运行。
#Activity 活动是最基本的 Android 应用程序组件,应用程序中,一个活动通常就是一个单独的屏幕。每一个活动都被实现为一个独立的类,并且从活动基类中继承而来,活动类将会显示由视图控件组成的用户接口,并对事件做出响应
当一个新的屏幕打开后,前一个屏幕将会暂停,并保存在历史堆栈中。用户可以返回到历史堆栈中的前一个屏幕。当屏幕不再使用时,还可以从历史堆栈中删除。默认情况下,Android 将会保留从主屏幕到每一个应用的运行屏幕。
简单理解 Activity 代表一个用户所能看到的屏幕, Activity 主要是处理一个应用的整体性工作
#Intent 调用 Android 专有类 Intent 进行架构屏幕之间的切换。Intent 是描述应用想要做什么。Intent 数据结构两个最重要的部分是动作和动作对应的数据
-
显式调用Intent
-
隐式调用Intent
intent-filter
-
通过隐式调用其他程序
android:scheme
intent.setData
-
向其他Activity传递数据
putExtra
,getStringExtra
-
返回数据给上一个Activity
startActivityForResult
,putExtra
,setResult
,onActivityResult
,onBackPressed
活动状态
-
运行状态
-
暂停状态
-
停止状态
-
销毁状态
-
onCreate
-
onStart
-
onResume
-
onPause
-
onStop
-
onDestroy
-
onRestart
活动的生存期
- 完整生存期: onCreate->onDestroy
- 可见生存期: onStart->onStop
- 前台生存期: onResume->onPause
android:launchMode
- standard
- singleTop
-
知晓当前是在哪一个活动
创建一个基类Activity, onCreate的时候
Log.d("BaseActivity", getClass().getSimpleName());
-
随时随地退出程序
建立一个集合类(静态变量, 静态方法), 每个Activity创建时自动添加进集合, 销毁时从集合中删除 需要退出时遍历集合中所有Activity, 全部
finish
, 并且killProcess
-
启动Activity的最佳写法
把启动Activity需要的参数封装成一个
actionStart
静态方法放在Activity中, 一目了然
- android:src
- imageView.setImageSource
- android:visibility
- progressBar.setVisibility
- style="?android:attr/progressBarStyleHorizontal", android:max=100
- progressBar.setProgress()
new AlertDialog.Builder
dialog.setPositiveButton
,dialog.setNegativeButton
new ProgressDialog
android:orientation
,android:layout_weight
android:layout_alignParentTop
,android:layout_alignParentLeft
,android:layout_alignParentRight
,android:layout_alignParentBottom
,android:layout_centerInParent
android:layout_toRightOf
,android:layout_toLeftOf
,android:layout_above
,android:layout_below
android:layout_gravity
compile 'com.android.support.percent:24.2.1'
app:layout_widthPercent
,app:layout_heightPercent
- LayoutInflater.from(context).inflate(R.layout.title, this)
- <com.example.uiscustomviews.TitleLayout...>
ArrayAdapter<String> adpter=new ArrayAdpater<String>(MainActivity.this, android.R.layout.simple_list_item_1, data)
,listView.setAdapter(adpter)
public class FruitAdapter extends ArrayAdatper<Fruit>
, override thegetView
method, false inLayoutInflater.from(getContext()).inflate(resourceId, parent, false)
- Reuse
convertView
in overridegetView
method view.setTag(viewHolder)
,view.getTag()