Android应用程序由一些零散的有联系的组件组成,通过一个工程manifest绑定在一起。在manifest中,描述了每一个组件以及组件的作用,其中有6个组件,它们是Android应用程序的基石。

  • Activities(活动)
  • Service(服务)
  • Content Provider(内容提供者)
  • Intent(意图)
  • Broadcast Receiver(广播接收器)
  • Notification(通知)
在这里我们提到了组件(Component)的概念,组件(Component)是对数据和方法的简单封装,组件可以有自己的属性和方法。属性是组件数据的简单访问者。方法则是组件的一些简单而可见的功能。使用组件可以实现拖放式编程、快速的属性处理以及真正的面向对象的设计。谈及所谓架构和重用的时候,组件是难以回避的概念。在此我们再扩展一下,了解一下Android的面向组件思想。

【博客专栏:http://blog.csdn.net/column/details/alearning.html

【以下摘自CSDN博客:http://blog.csdn.net/luoxinwu123/article/details/8019547】

面向组件思想是在软件规模扩大,复杂度上升的背景下,以面向对象为基础而提出的一种软件设计思想。可以把它理解为一种更粗粒度的面向对象,其粒度一般大于对象,但具体要到什么程度,又可以根据实际情况来决定。这种思想以组件为基础,强调“服务”的概念。
面向组件具有以下特点:
低耦合性:组件之间一般互不依赖,一个组件只需要知道另一个组件的“名字”就可以访问它;
高重用性:系统级的重用;
高互操作性:不同的开发商开发出来的组件只要定义好了接口就可以互相访问;
进程的透明性:组件可以工作在同一个进程也可以工作在不同的进程;
语言和开发环境的独立性:组件只需要定义好服务接口,内部实现可以采用任何语言。
面向组件的框架已经有很多了,如JavaBean、EJB、COM等。Android系统并没有声称自己是面向组件的,但从其设计思想来看,Android一开始的设计考虑就是要采用一种“无边界”的设计方式,要实现系统内资源高度的重用。
事实上,Android完全符合面向组件的特征。首先,Android提供了Activity、Service、BroadcastReceiver和ContentProvider四大组件。这四大组件之间的协作是通过Binder机制和来协作的,其中ServiceManager与ActivityManagerService是保证组件间协同工作的最重要的基础,同时它们本身也是一种组件。ServiceManager是Binder的守护进程,用来管理各种服务,并向调用这些服务的客户提供查询远程接口的功能。而ActivityManagerService负责所有Activity和Service的启动,另外还负责系统中所有广播的注册和发布以及把广播发送给接收者。

本章将主要以案例的方式逐步介绍相关基本组件的概念、知识点与使用方式。接下来一起进行第一个基本组件Activity的学习。

Activity(活动)

首先我们需要明确对Activity(活动)的理解,Activity是用户与应用程序的交互的接口,即提供某个可视化的图文界面,同时是一组控件的容器,即我们可以把我们需要的控件添加在Activity活动界面中。
创建Activity需要继承android.app.Activity对象生成对应的子类。一般情况下,我们需要重写(覆盖)方法

protected void onCreate(Bundle savedInstanceState) 
较为深入的了解Activity,需要明白与说明Activity的生命周期。首先看看android developers 网上的activity的生命周期图,如下图所示:



在 Android 中,Activity 拥有四种基本状态:
1. Active/Runing:一个新的Activity入栈后,它在屏幕最前端,处于栈的最顶端,处于可见并且可交互的激活状态。
2. Paused:当 Activity 被另一个透明或者 Dialog 样式的 Activity 覆盖时的状态。此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但它已经失去了焦点故不可与用户交互。
3. Stoped:当 Activity 被另外一个 Activity 覆盖、失去焦点并不可见时的状态。
4. Killed:Activity 被系统杀死回收或者没有被启动时的状态。


Activtiy的生命周期涉及的方法:
protected void onCreate(Bundle savedInstanceState):一个 Activity 的实例被启动时调用的第一个方法。一般情况下,我们都覆盖该方法作为应用程序的一个入口点,在这里做一些初始化数据、设置用户界面等工作。大多数情况下,我们都要在这里从 xml 中加载设计好的用户界面。
protected void onStart():该方法在 onCreate() 方法之后被调用,或者在 Activity 从 Stop 状态转换为 Active 状态时被调用。
protected void onResume() :在 Activity 从 Pause 状态转换到 Active 状态时被调用。一般在这块做数据恢复工作。
protected void onPause(): 在 Activity 从Active状态转换到Pause 状态时被调用。一般我们在这里保存 Activity 的状态信息。
protected void onStop() :在 Activity 从 Active 状态转换到 Stop 状态时被调用。
protected void onDestroy() :在 Active 被结束时调用,它是被结束时调用的最后一个方法,在这里一般做些释放资源,清理内存等工作。
protected void onRestart(): 在 Activity 从 Stop 状态转换为 Active 状态时被调用,不经常使用。
创建完Activity后,需要在AndroidMainifest.xml文件中注册已创建的Activity,本例的Activity为TestActivity。

<activity            android:name="cn.mahaochen.app.alearning.chapter5.TestActivity"            android:screenOrientation="portrait" ></activity>

在此我们拓展一下知识与复习原来的知识点,关于AndroidMainifest.xml的属性配置。

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.mahaochen.activity"    android:versionCode="1"    android:versionName="1.0" >    <application        android:icon="@drawable/icon"        android:label="@string/app_name" >        <!--            .表示MainActivity是当前包com.mahaochen.activity下的类。如果类在应用的当前包下,可以省略点符号;如果类在应用的子包下必须加点,              如:MainActivity类在com.mahaochen.activity.user包下可以这样写:<activity              android:name=".user.MainActivity" />          -->        <activity            android:name=".MainActivity"            android:label="@string/app_name" >            <!--                1、一个应用程序可以有多个Activity,每个Activity是同级别的,那么在启动程序时,最先启动哪个Activity呢?                 有些程序可能需要显示在程序列表里,有些不需要。怎么定义呢?                  android.intent.action.MAIN决定应用程序最先启动的Activity                  android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里                 2、因为你的程序可能有很多个activity只要xml配置文件中有这么一个intent-filter,而且里面有这个launcher,那么这个activity就是点击程序时最先运行的那个activity。                  3、现在只有一个activity,那么加不加就没有关系了。用于模拟器启动时设置为默认打开为的activity。              -->            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application>    <uses-sdk android:minSdkVersion="7" /></manifest>

案例程序

【TestActivity.java】

import cn.mahaochen.app.alearning.R;import android.app.Activity;import android.os.Bundle;import android.util.Log;public class TestActivity extends Activity{private final static String TAG = "MaHaochen_TestActivity";/** * 通常情况下覆盖本方法,加载指定的ContentView资源布局 */@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_chapter5_activity);Log.e(TAG, "Activity_onCreate");}@Overrideprotected void onStart() {super.onStart();Log.e(TAG, "Activity_onStart");}@Overrideprotected void onResume() {super.onResume();Log.e(TAG, "Activity_onResume");}@Overrideprotected void onPause() {super.onPause();Log.e(TAG, "Activity_onPause");}@Overrideprotected void onStop() {super.onStop();Log.e(TAG, "Activity_onStop");}@Overrideprotected void onDestroy() {super.onDestroy();Log.e(TAG, "Activity_onDestroy");}@Overrideprotected void onRestart() {super.onRestart();Log.e(TAG, "Activity_onRestart");}}

【activity_chapter5_activity.xml】

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <TextView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:gravity="center"        android:text="Activity学习" /><ImageView android:src="@drawable/chapter5_activity_lifecycle"    android:layout_height="wrap_content"    android:layout_width="match_parent"/></LinearLayout>

效果截图



参考资料

1、 http://blog.csdn.net/bage1988320/article/details/6855774
2、 http://www.oschina.net/question/54100_27841
3、 http://blog.csdn.net/android_robot/article/details/6906243

更多相关文章

  1. Android(安卓)的 SimpleAdapter
  2. Android(安卓)音效流程分析
  3. Android(安卓)使用ExoPlayer视频播放 (一)
  4. [置顶] android6.0源码分析之Activity启动过程
  5. 【Android(安卓)Developers Training】 83. 实现高效网络访问来
  6. Android(安卓)6.0 存储权限管理
  7. JS、LUA都可以开发移动应用
  8. Android菜鸟日记 22音乐- MediaPlayer
  9. Android(安卓)调用 startActivityForResult(intent,requestCode)

随机推荐

  1. Android Studio 简单设置
  2. 利用HTML5开发Android应用程序 PPT
  3. Android.Essentials[精要]
  4. Eclipse for Android开发环境设置
  5. 错误收集
  6. android蓝牙BLE(一) —— 扫描
  7. Handler: Service中使用Toast
  8. Android多线程(一)
  9. Android 主题切换/换肤方案 研究(一) -
  10. ListView常用属性、方法