一、Android简介
1.1 Android 体系结构
-1)应用层
-2)应用框架层
该层是Android应用开发的基础
应用框架层包括活动管理器、窗口管理器、内容提供者、视图系统、包管理器、电话管理器、资源管理器等共10部分。
在Android平台上,开发人员可以完全访问核心应用程序所使用的API框架
-3)系统运行库层
分为两部分:系统库和Android运行时
-系统库是应用程序框架的支撑,是连接应用程序框架层与Linux内核层的重要纽带,包括9个子系统:图层管理、媒体库、SQLite等
-Android运行时包括核心库和Dalvik虚拟机
前者既兼容了大多数JAVA语言所需要调用的功能函数,又包括了Android的核心库;
后者是一种基于寄存器的JAVA虚拟机,Dalvik虚拟机主要是完成对生命周期的管理、堆栈的管理等功能
每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例
-4)Linux内核层
android的核心系统服务依赖于Linux内核,Linux内核也同时作为硬件和软件栈之间的抽象层
1.2 搭建Android应用开发环境
-安装JDK
-安装Android Studio程序
-安装Genymotion模拟器并建立与Android Studio的连接
1.3 Android程序结构
-src目录
是JAVA源代码存放目录,里面一般是.java结尾的java文件
-res目录
是资源目录,可以存放应用程序使用到的各种资源
-drawable 存放图片
-layout 存放xml界面文件,用于显示用户操作界面
-values 存放应用程序中使用到的各种类型的数据,不同类型的数据存放在不同的文件中
-bin目录
主要包含了一些在编译时自动产生的文件,其中有一个当前项目编译好的安装包.apk
-libs目录
如果你的项目中使用到了第三方Jar包,需要把这些Jar包放在libs目录下
-AndroidMamifest.xml 列出了应用程序提供的功能,开发完成的各种组件需要在此文件中进行配置,当应用程序使用到的系统内置的应用还需要在此文件中声明使用权限。每个Android程序必须在根目录下包含一个AndroidMamifest.xml文件
1.4 Android应用的基本组件介绍
1.Activity:应用表示层(基类Activity)
一个活动表示一个可视化的用户界面。多个活动一起工作形成了一个整体的用户界面,但统一应用程序中每个Activity是相互独立的。每一个活动都是作为Activity基类的一个子类的实现
Activity利用View实现应用程序中的GUI,使用Activity.setContentView()方法可以设置当前Activity中的View对象
2.Service:没有可见的用户界面,但能够长时间运行于后台
Service是一个没有用户界面的在后台运行执行耗时操作的应用组件
一个组件能够绑定到一个Servi与之进行交互
3.Broadcase Receiver:用户接受广播通知的组件(基类BroadcastReceiver)
广播接受者仅仅是接收广播公告并作出相应的相应。所有接受者均继承自BroadcastReceiver基类
BroadcastReceiver自身并不实现图形用户界面,但当它收到某个通知后,可以启动Activity作为相应,或者通过NotificationManager提醒用户
4.Content Provider:应用程序建数据通信、共享(基类ContentProvider)
可以将一个应用程序的制定数据集提供给其他应用程序,这些数据可以存储在文件系统中、一个SQLite数据库中,或以任何其他合理的方式存储
使用一个ContentResolver对象并调用他的方法,ContentResolver能够与任何内容提供者通信,它与提供者合作来管理参与进来的进程间的通信
5.Intent:连接组件的纽带通信
可以再不同的组件之见传递消息,即将一个组件的请求意图传给另一个组件,因此Intent是包含具体请求信息的对象。针对不同的组件,Intent所包含的消息内容有所不同
Intent是一种运行时绑定机制,它能够在程序运行的过程中连接两个不同的组件
1.5 Activity的生命周期
1.Activity类处于android.app包中,继承体系如下:
-java.lang.Object
-android.content.Context
-android.app.ApplicationContext
-android.app.Activity
2.Activity是单独的类,用于处理用户操作,Activity类创建了一个窗口,开发人员可以通过setContentView(View)接口将UI放到Activity创建的窗口中,大部分的Activity子类都需要实现以下两个接口:
-onCreate(Bundle) 是初始化Activity的地方
-setContentView(int)设置在资源文件中定义的UI
-findViewById(int)可以获得UI中定义的窗口
-onPause() 是使用者准备离开Activity的地方,此处,任何的修改都应该被提交
3.为了能够使用Context.startActivity(),所有的Activity类都必须在AndroidManifest.xml文件中定义相关的”Activity”项
在系统中的Activity被一个Activity栈所管理
-Activity有4种本质上相区别的状态
1).在屏幕的前台(Activity的栈顶),称为活动状态或者运行状态(Activity or Running)
2).如果一个Activity失去焦点,但是依然可见,称为暂停状态(Paused) 一个暂停状态的Activity依然保持活力,但是在系统内存极端低下的时候被杀掉
3).如果一个Activity被另外的Activity完全覆盖掉,称为停止状态(Stopped) 它依然保持所有状态和成员信息,但是它不再可见,所以它的窗口被隐藏,当系统内存需要被用在其他地方的时候,Stopped的Activity的被杀掉
4).如果一个Activity是Paused或者Stopped状态,系统可以将该Activity从内存中删除——要求该Activity结束 or 直接杀掉它的进程 当该Activity再次显示给用户时,它必须重新开始和重置前面的状态。
Activity的整个生命周期都定义在下面的接口方法中,所有方法都可以被重载。所有的Activity都需要实现自己的onCreate(Bundle)方法来进行初始化设置
public class Activity extends ApplicationContext {
protected void onCreate(Bundle icicle);
protected void onStart();
protected void onRestart();
protected void onResume();
protected void onPause();
protected void onStop();
protected void onDestroy();
}
Activity有3个关键的循环:
1).整个的生命周期:从onCreate(Bundle)开始到onDestroy()结束
-onCreate(Bundle)设置所有的全局状态
-onDestroy()释放所有的资源
2).可见的生命周期:从onStart()开始到onStop()结束。
在这段时期可以看到Activity在屏幕上,不能喝用户进行交互。在这两个接口之间,需要保持显示给用户的UI数据和资源等。可以被多次调用,因为Activity随时可以在可见状态和隐藏状态之间切换
3).前台的生命周期:从onResume()开始到onPause()结束
在这段时期,该Activity处于所有Activity的最前面,能够和用户进行交互,Activity可以经常性的在resumed和paused状态之间切换
1.6程序调试
1.LogCat
LogCat是用来获取系统日志信息的工具,可显示在Eclipse IDE中,在Androi Studio 中,Tools->Android->Android Device Monitor
Android Device Monitor窗口上方有设备管理,可以选中已连接的模拟器或实际设备(手机、平板),在右侧的窗口可以查看当前设备的实时数据及状态,如:数据连接,线程,文件管理等等
Android Device Monitor窗口下方为Logcat和Console控制台选择需要追踪的工程,查看详细调试信息
2.DDMS (待补充)