Android 可分为四层架构,五块区域
1. Linux内核层
Linux2.6内核,提供了底层驱动
2. 系统运行库
C/C++库提供了主要的特性支持,如SQLite、OpenGL/ES、Webkit
Android运行时库,包括了Dalvik虚拟机
3. 应用框架层
提供构建应用程序时可能用到的各种API
4. 应用层
所有安装在手机上的应用程序都属于这一层
Android系统组件分别是活动Activity、服务Service、广播接收器BroadcastReceiver和内容提供器Content Provider。
assets主要存放一些随程序打包的文件,在程序运行时可以动态提取到这些文件的内容,所有网页相关的文件也都存放在这个目录下。
project.properties 指定了编译程序时所使用的SDK版本
Android程序的设计讲究逻辑和视图分离。
menu文件夹用来存放菜单文件。
应用程序中没有声明任何一个Activity为主Activity,仍然可以正常安装,但是无法在启动器中看到或者打开这个Activity,一般作为第三方服务供其他的应用在内部调用。
request Window Feature()一定要在setContentView()前执行。
intent一般用来启动Activity,Broadcast和Service。
startActivity专门用来启动Activity,可以接受Intent参数
AndroidManifest.xml中,<action>标签指定了当前活动可以响应的action,而<category>标签则包含了一些附加信息,更精确得指明了当前Activity能够响应的Intent中可能带有的category。只有<action>和<category>中的内容能够匹配上Intent中指定的action和category时,这个Activity才能响应该Intent。每个Intent中只能指定一个action,但能够指定多个category,用Intent.addCategory()方法。
使用隐式Intent可以启动其他程序的Activity。
startActivityForResult()也可以用于启动Activity,但这个方法期望在Activity销毁时能够返回一个结果给上一个Activity。
startActivityForResult()接收两个参数,一个是Intent,第二个是请求码,请求码只要是一个唯一的值就可以了。在第二个Activity finish()前,用setResult()返回结果,这个方法有两个参数,第一个参数用于向上一个Activity返回处理结果,一般只使用RESULT_OK或者RESULT_CANCELED这两个值,第二个参数是带有数据的Intent。
此时调用第一个Activity的onActivityResult()方法,有3个参数requestCode, resultCode与Intent,用这个方法得到返回数据。
<span style="white-space:pre"> </span>protected void onActivityResult(int requestCode, int resultCode, Intent data){
<span style="white-space:pre"> </span> switch(requestCode)
<span style="white-space:pre"> </span> {
<span style="white-space:pre"> </span> case 1://1是设置的requestCode,在startActivityForResult()中
<span style="white-space:pre"> </span> if(resultCode == RESULT_OK){
<span style="white-space:pre"> </span> //相关处理
<span style="white-space:pre"> </span> <span style="white-space:pre"> </span>
<span style="white-space:pre"> </span> }
<span style="white-space:pre"> </span> break;
<span style="white-space:pre"> </span> default:
<span style="white-space:pre"> </span> break;
<span style="white-space:pre"> </span> }
<span style="white-space:pre"> </span>}
每个Activity在其生命周期中最多会有4种状态。
1)运行状态:该Activity位于Task的顶部时。
2)暂停状态:不处于栈顶但是可见。
3)停止状态:不处于栈顶,且完全不可见,但是会为该Activity保存相应的状态和成员变量。
4)销毁状态:从Task中移除。
Activity中定义了7个回调方法,覆盖了Activity生命周期的每一个环节,onCreat()、onStart(), onResume(), onPause(), onStop(), onDestroy(), onRestart()
完整生命期:onCreat()与onDestroy()之间经历
可见生命期:onStart()与onStop()之间经历
前台生命期:onResume()与onPause()之间经历,Activity处于运行状态
Android提供了onSaveInstanceState()解决Activity呗系统回收时数据的保存,该方法携带一个Bundle类型的参数,在OnCreate()方法中,通过savedInstanceState来读取数据。
Activity的启动模式有standard, singleTop, singleTask和sigleInstace.
standard是默认启动模式,不在乎该Activity是否在Task中已经存在。
singleTop:当Activity在Task栈顶时,直接使用,不再创建,其余情况下均创建。
singleTask:整个应用程序的上下文中只有一个实例
singleInstance:有一个单独的Task来管理整个Activity,注意返回时是返回对应Task的下一个。
随时退出Activity,可以建立BaseActivity,有ActivityCollector类,提供add,remove以及finish()方法,在BaseActivity中实现add与remove方法。
public class ActivityConllector{
public static List<Activity> activities = new ArrayList<Activity>();
public static void addActivity(Activity activity){
activities.add(activity);
}
public static void removeActivity(Activity activity){
activities.remove(activity);
}
public static void finishAll(){
for(Activity activity : activities){
if(!activity.isFinishing()){
activity.finish();
}
}
}
}
public class BaseActivity extends Activity{
protected void onCreat(Bundle savedIntanceState){
super.onCreat(savedInstanceState);
ActivityCollector.addActivity(this);
}
protected void onDestroy(){
super.onDestroy();
ActivityCollector.removeActivity(this);
}
}
启动Activity的最佳写法,在要启动的Activity中写public static void startAction()方法,参数中传入context与需要的其他参数,在该方法中对参数再用Intent封装。因此,第一个Activity只需要调用第二个Activity的这个方法就可以了。
Android的UI
fill_parent与match_parent意义相同,但是官方推荐使用match_parent
android:gravity可以用“|”来同时指定多个值
android:maxLine指定最大行数
可以通过android:max给进度条指定一个最大值,然后可以在代码中动态改变进度条值
int progress = progressBar.getProgress();
progress += 10;
progressBar.setProgress(progress);
android:gravity用于指定文字在控件中的对齐方式。android:layout_gravity用于指定控件在布局中对齐方式
在LinearLayout中,若指定了android:layout_weight属性,则layout_width或者layout_height没有意义,建议设定为0dp
inputTpyt:"textPassword"来指定输入类型为密码