Android开发教程:保存Activity状态

前一讲我们通过一个发送短信的小例子讲解了Activity在横竖屏切换时的生命周期情况。其实那个程序还有一个Bug,当我们编辑了短信将要发送的时候,如果你不小心把手机屏幕切换了一下,然后你会发现你编辑的短信已经被清空了,这时你又要重新编辑。试想一下,当我们好不容易编辑了一条短信,然后突然一个电话打过来了,然后你接完电话返回到短信的界面时,你却发现你刚才编辑的短信成了空白,你心底一定会骂,是哪个二货设计的这个功能,太他妈不人性化了。 那么这节我们就来解决这个问题。

当然,保存Activity状态的方法有多种,我们这讲来介绍一下通过重写Activity的onSaveInstanceState事件处理函数来保存Activity的状态。

Android开发教程:横竖屏切换时activity的生命周期及发送短信功能的实现

前一讲我们介绍了Activity的生命周期,使用过Android智能手机的人都应该知道,有些应用当我们横竖切换手机时,显示界面也会调整到相应的状态下。那么当手机屏幕横竖切换时,activity的生命周期又是如何的呢?这讲我们将来解决这个问题。

本节我们通过一个发送短信的小程序来讲解这个问题,同时讲解一下Android发送短信功能的实现。

1、新建一个Android项目:SMS
2、编辑字符串strings.xml文件内容为:

Android开发教程:Activity生命周期

在介绍Activity的生命周期之前,我们先来了解一下Activity的几种状态。Android针对Activity的管理使用的是栈,就是说某一个时刻只有一个Activity处在栈顶,当这个Activity被销毁后,下面的 Activity才有可能浮到栈顶,或者有一个新的Activity被创建出来,则旧的Activity就被压栈沉下去了。Activity是直接涉及到与用户交互的界面处理的,而任意时刻与用户处于交互状 态的界面只能有一个,所以Android针对Activity的管理采用了具有层次感的栈的数据结构,理解这一点对于Activity一些状态转换的细节 处理非常重要。

依据这种基于界面层次性的理解,官方文档主要提了两点:

Android开发教程:AndroidManifest.xml文件说明

上一讲我们介绍了使用Eclipse开发Android应用程序时的项目结构,我们知道开发工具会为我们自动新建一个AndroidManifest.xml,那么这个文件到底有什么作用呢?结构怎样?如何配置?这一讲则一一回答这些问题。

1、AndroidManifest.xml是什么?

AndroidManifest.xml是Android应用程序中最重要的文件之一。它是Android程序的全局配置文件,是每个 android程序中必须的文件。且文件名是固定的,不能修改。应用程序需要通过它向Android系统提供一些必需的信息,需要在 application运行前提供给系统。它位于我们开发的应用程序的根目录下,描述了package中的全局数据,包括package中暴露的组件 (activities, services, 等等),以及他们各自的实现类,各种能被处理的数据和启动位置等重要信息。

AndroidManifest.xml主要包含以下功能:

  • 说明应用程序的java 包,该包名是应用程序的唯一标识;
  • 描述应用程序的组件:该应用程序由哪些activity,service,broadcast receiver和content provider组成;
  • 说明应用程序的组件运行在哪个process下:决定那些进程将容纳应用程序组件。
  • 声明应用程序所必须具备的权限,用以访问受保护的部分API,以及与其他应用程序的交互;
  • 声明应用程序其他的必备权限,用以组件之间的交互;
  • 列举应用程序运行时需要的环境配置信息,这些声明信息只在程序开发和测试时存在,发布前将被删除;
  • 声明应用程序所需要的Android API的最低版本级别,比如1.0,1.1,1.5;
  • 列举应用程序所需要链接的库;

2、AndroidManifest.xml的结构和规则

我们结合上一讲我们新建的HelloWorld项目中的文件来进行说明:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.liuzhichao.helloworld"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk android:minSdkVersion="8" />
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".HelloWorldActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

除去头部XML信息说明,首先是manifest项—根节点,其属性包括:schemas URL地址、包名(com.liuzhichao.helloworld),以及程序的版本说明。

其次是manifest的子节点application,其属性包 括:程序图标、程序名称。前面带有@表示引用资源,例如:@drawable/icon表示引用的是drawable资源中的icon,可以在其源工程的 res/drawable中找到。

uses-sdk android:minSdkVersion=”8″说明程序使用的Android SDK的最低版本,其中1表示Android 1.0,2表示Android 1.1,而8则表示Android 2.2。

然后就是application的子节点activity,其属性包括:activity的名称、activity的标 签名,其子节点intent-filter则是对activity的说明。

而在intent-filter中,action android:name=”android.intent.action.MAIN”category android:name=”android.intent.category.LAUNCHER”用以说明程序启动时的入口activity是哪个。如 果这两个属性值中分别含有MAIN和LAUNCHER,则说明它就是启动程序时的入口活动。

除了该示例manifest文件中所使用的元素之外,其他常见的标记包括以下几种。

<service>标记表示一个Service。service标记的属性包括它的类和标签。Service还可以包括<intent-filter>标记。

<receiver>标记表示一个BroadcastReceiver,它可以有一个显式<intent-filter>标记,也可以没有。

<uses-permission>标记通知Android该应用程序需要特定的安全权限。例如,如果某个应用程序需要访问某个设备上的联系人,则需要在它的AndroidManifest.xml文件中添加以下标记。

更多关于AndroidManifest.xml文件的介绍,大家可以参考官方文档:
http://developer.android.com/guide/topics/manifest/manifest-intro.html其对AndroidManifest.xml文件进行了详细的说明。

Android开发教程:Android项目的目录结构

通过前两节,我们分别介绍了在Windows7Ubuntu上搭建Android的开发环境,本节我们将新建一个HelloWorld项目,以此来介绍一下Android项目的目录结构。打开Eclipse,我们新建一个Android项目:HelloWorld。

](/images/2012/03/011.png "HelloWorld项目目录结构")

下面将分别介绍一下上面的各级目录结构。

Android开发教程:在Ubuntu(64位)搭建Android开发环境

由于长久以来在Windows上养成的操作习惯,对于一个新手来说成功安装一个Ubuntu系统也不是一件容易的事。所以很少有人真正使用Ubuntu系统作为自己的桌面环境。其实一旦你投入Ubuntu的怀抱之后,你会发现操作起来其实也是如此的顺手。况且,Ubuntu的一些特性,确实是Windows无法比拟的。比如说你想自己编译Android的源码,官方推荐的就是Ubuntu,在Ubuntu上下载Android源码也是一件很容易的事情。当你搭建好开发环境后,你会发现Android模拟器启动比Windows下快了许多…最重要的一点,当你工作之后,你会发现公司的同事都是使用的Ubuntu开发,那么你还有理由坚持Windows吗?本文不涉及Ubuntu系统的安装,大家自己可以自行Google之,如果你想安装Ubuntu+Windows双系统,也有很好的解决方案。下面就讲一下在Ubuntu上搭建Android的开发环境 。假设您已经了解相关的知识并能熟练使用Linux系统。

主要步骤如下:

  • 安装配置JAVA JDK
  • 下载Android SDK
  • 安装Eclipse配置Android开发环境

Android开发教程:在Win7下配置Android开发环境

对于新手来说,android开发环境的搭建与配置还是比较繁琐的,因为要下载的文件多,需要的时间比较长。这里摘录整理整个搭建过程的具体方法与步骤,以供参考。其实如果你有Java开发的经验,这些对于还是比较Easy的。

需要下载的文件:

Android开发教程:Android四大组件简介

上一讲我们对Android的架构有了一个整体的认识,这一讲我们同样从”整体”上介绍一下Android的几大组件。就像我们的手机,也是用电池、摄像头、CPU、屏幕,还有一些我们看不见的电路等等组成的一样,每一个Android应用程序也是通过一个个组件组成的。所不同的时,一个Android可以同时拥有一个或多个组件,也可以没有某一个组件。应用组件是一个android应用程序的重要基石。每一个组件都作为一个独立的实体存在,起着特定的作用。Adnroid中有四种不同类型的应用组件。每种类型提供不同的用途,并各自拥有不同的生命周期。Android有四大组件:Activity、Service、Broadcast Receiver、Content Provider。

但是正如我们上面所说,并不是每一个Android应用程序都需要这四种组件,某些时候,我们只需要这四种中的几种组合成我们的应用。下面我们对这四个组件进行一些简单的说明,目的是让大家有一个整体的认识,每一个组件我们后面都还会详细的介绍。

Android开发教程:Android的系统构架及特性

在接触一个平台之前,先从整体上对这个平台的架构进行分析和认识对于我们今后的开发是很有必要的。
本文的主要内容有:

1、Android的系统架构
2、Dalvik虚拟机的特性

Android的系统架构和其操作系统一样,采用了分层的架构。从架构图看,Android分为4层,从高到底分别是应用层、应用框架层、系统运行库层和Linux内核层。