`

应用组件-Activities

阅读更多

activity是与用户进行交互的屏幕,比如:打电话,拍照,发送邮件,浏览地图。每个activity被赋予了一个窗口,在这个窗口上可以勾画用户交互界面。窗口可以填充整个屏幕,也可以比屏幕小,或者悬浮在其它窗口的上面。

 

一个应用通常包含多个activity,各个activity彼此松散地进行关联。其中有一个activity被指定为main activity,当应用第一次启动的时候,main activity会出现在用户面前。为了执行不同的动作,每个activity都可以启动其它的activity。每次启动一个新的activity,原来的activity会被停止,但是系统仍然会把它保留在back stack中,同时新启动的activity也会压入back stack中,并获得用户焦点。当用户执行完操作,点击后退的时候,当前activity会被弹出back stack,并被destroy,然后前一个activity继续运行。

 

每个activity都存在生命周期,生命周期中包括各种状态,每当状态发生变化的时候,系统都会调用相应的生命周期回调方法,在回调方法中,给用户提供做一些事情的机会。比如被stop的时候,你的activity应该释放大对象,比如网络连接,数据库连接。当activity被resume的时候,可以重新获取需要的资源并且继续执行之前被中断的动作。这些状态的变化都是activity生命周期的一部分。

 

创建一个activity

为了创建一个activity,你必须创建一个android.app.Activity类的子类。并且实现回调方法,这样,当activity的生命周期中的状态发生变化的时候,系统可以进行回调。比如:创建,停止,继续,销毁。最重要的方法包括onCreate和onPause。

  • onCreate方法中,你应该初始化必要的组件,必须调用setContentView方法来设置activity的用户界面的layout。
  • onPause方法,当用户离开activity的时候,会回调此方法。在此方法中,你应该提交需要持久化的变更,因为用户可能不会再回到这个activity。

实现一个用户界面

activity的用户界面由一组继承自android.view.View类的view组成。每个view控制activity窗口中的一个特定的矩形区域,并可以对用户的动作作出响应。比如:一个view可以是一个按钮,当用户点击的时候可以做一系列的动作。

 

android提供了许多现成的view,你可以用它们来设计和组织你的画面布局。

  • widgets:可视可交互的view,比如:button,text field,checkbox,image
  • layouts:继承自android.view.ViewGroup类的view。它为子view提供一种布局模式,比如:linear layout,grid layout,relative layout。你也可以通过View或者ViewGroup类的子类来创建自己的widget和layout,然后把它们应用到你的activity中。

定义一个layout的最通用做法是使用一个XML layout 文件,这样你可以把用户界面的设计单独从代码中提取出来,在代码中仅定义activity的各种行为。然后调用setContentView(int layoutResID)方法来指定activity的conent到该XML layout文件。当然,你也可以不使用XML layout文件,而是直接在代码中定义各种View以及ViewGroup,然后把root ViewGroup传递给setContentView(View view)方法。

 

在manifest文件中声明activity,使用intent filters

<activityandroid:name=".ExampleActivity"android:icon="@drawable/app_icon">
    <intent-filter>
        <actionandroid:name="android.intent.action.MAIN"/>
        <categoryandroid:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>
  • action元素指定该activity是应用的main入口点
  • category元素指定该activity被追加到系统的应用启动列表中,也就是说允许用户启动该activity。
  • 如果你不希望别的应用使用你的activity,那么不需要追加任何其它的intent-filter,当然,在你的应用内部可以使用显式的intent(直接指定包名和类名)来启动activity。
  • 在一个应用中,只能有一个activity具有MAIN action和LAUNCHER category。
  • 如果你想使用隐式intent(别的应用或者同一应用内部)来启动activity,那么必须为每种intent类型定义一个包含action,category,data的intent-filter。

启动一个activity(不返回结果)

如果要启动的activity在同一个应用的内部,可以采用显式的intent

Intent intent =newIntent(this,SignInActivity.class);
startActivity(intent);

如果要启动的activity在另外一个应用的内部,那么只能采用隐式intent

比如:打算发送邮件

Intent intent =newIntent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);
startActivity(intent);

recipientArray是一个string数组,存放收件人的email地址。

如果系统通过intent-filter,匹配到多个可以使用的activity的话,会提示用户选择其中的一个。

当邮件发送完成,会回到原来的activity继续运行。

 

启动一个activity(返回结果)

privatevoid pickContact(){
    // Create an intent to "pick" a contact, as defined by the content provider URI
    Intent intent =newIntent(Intent.ACTION_PICK,Contacts.CONTENT_URI);
    startActivityForResult(intent, PICK_CONTACT_REQUEST);
}

@Override
protectedvoid onActivityResult(int requestCode,int resultCode,Intent data){
    // If the request went well (OK) and the request was PICK_CONTACT_REQUEST
    if(resultCode ==Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST){
        // Perform a query to the contact's content provider for the contact's name
        Cursor cursor = getContentResolver().query(data.getData(),
        newString[]{Contacts.DISPLAY_NAME},null,null,null);
        if(cursor.moveToFirst()){// True if the cursor is not empty
            int columnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
            String name = cursor.getString(columnIndex);
            // Do something with the selected contact's name...
        }
    }
}

从地址簿中选择一个联系人,然后系统会通过回调onActivityResult方法来返回Intent类型的结果数据,然后从contact的content provider中检索出联系人的名字。

 

关闭一个activity

  • 可以通过调用finish()方法结束当前的activity
  • 也可以通过调用finish(int requestCode)方法来结束之前通过startActivityForResult(Intent, int requestCode)启动的activity,如果指定的requestCode对应了多个activity,那么所有对应的activity都将被关闭。
分享到:
评论

相关推荐

    新版Android开发教程.rar

    • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • 集成的浏览器 基于开源的 WebKit 引擎 • 优化的图形库 包括定制的 2D 图形库, 3D 图形库基于 OpenGL ES 1.0 ...

    学习笔记之AndroidManifest.xml文件解析.docx

    * `&lt;application&gt;`:定义了应用程序的组件,包括活动(activities)、服务(services)、内容提供者(content providers)、广播接收器(broadcast receivers)等。 * `&lt;uses-permission&gt;`:定义了应用程序所需的...

    Android Debug Bridge(安卓调试桥) tools platform-tools adb命令行工具

    Android四大组件有Activity,Service服务,Content Provider内容提供,BroadcastReceiver广播接收器,具体不做多讲,常用的有以下: 查看前台 Activity命令:adb shell dumpsys activity activities | findstr ...

    安卓开发外文翻译.pdf

    安卓开发外文翻译.pdf 文件提供了 Android 应用程序开发的基础知识,涵盖了 Android 应用程序的文件结构、安全机制、组件类型和权限管理等方面。 Android 应用程序文件结构: * 一个 Android 应用程序是一个 APK ...

    Android应用程序的原理及术语

    Android应用程序的原理及术语个Android...• 2、应用程序组件 • 2.1、活动(Activities) • 2.2、服务(Services) • 2.3、广播接收者(Broadcast receivers) • 2.4、内容提供者(Content providers) .......

    FIPER培训初级教程3.pdf

    在 Activities 标签上, 选中 Simcode 组件,并将其拖至工作流中,如下图所示。 3. 将 simcode 组件重命名为 "Weightsarg",然后双击或者点击右键,"编辑"该组 件的内容。 在弹出的"Component Editor"界面中,首先...

    Android_Minifest详解

    它位于我们开发的应用程序的根目录下,描述了package中的全局数据,包括package中暴露的组件 (activities, services, 等等),以及他们各自的实现类,各种能被处理的数据和启动位置等重要信息。

    计算机组装与维护-认识计算机的组成-教学设计.docx

    硬件系统包括 CPU、主板、内存、硬盘、键盘、鼠标、显示器、音箱等组件,而软件系统则包括操作系统、应用软件等。 知识点2:计算机硬件系统的组成部件 计算机硬件系统的组成部件包括 CPU、主板、内存、硬盘、键盘、...

    Android程序开发概述

    讲叙Android的基本开发,重点讲叙如下几点 1. 应用程序组件 2. Activities和任务 3. thread & process 4. 组件的生命周期

    Android 暂停和恢复Activity

    一个Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务,例如拨号、拍照、发送email、看地图。每一个activity被给予一个窗口,在上面可以绘制用户接口。窗口通常充满屏幕,但也可以小于...

    基于Android扫雷游戏的设计实现分析.doc

    2. Android 应用程序构造: Android 应用程序的构造主要包括 Activity、Service、Broadcast Receiver 和 Content Provider 四个组件。其中,Activity 负责与用户交互,Service 负责后台任务,Broadcast Receiver ...

    adb1.0.26包含fastboot.exe

    应用签名与 ROM 签名一致,被当作内置应用 1. 确认 sdcard 可用,或者安装到内置存储; 2. 打包时不与 ROM 使用相同签名 INSTALL_FAILED_INVALID_INSTALL_LOCATION 1. 不能安装到指定位置; 2. 应用签名与 ROM 签名...

    IT咨询项目汇报框架PPT课件.pptx

    知识点3:一体化平台组件描述 * 应用集成:提供业务应用的应用集成平台 * 数据中心:提供系统间交换数据处理机制和高效的运算能力 * 企业门户:提供集成的工作桌面和统一的目录服务和身份、权限认证机制 知识点4:...

    Java职业笔试题-Syllabus:CST2301-d655课程大纲,2015年秋季

    Java职业笔试题CST 2301:多媒体和移动设备编程 (3 学分,2 课时,2 实验课时),纽约市理工学院计算机系统...创建简单的应用程序来说明图形用户界面、命令和事件处理中抽象和已发现组件的概念。 了解将大型多媒体文

    Android开发之Activity详解

     一个Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务,例如拨号、拍照、发送email、看地图。每一个activity被给予一个窗口,在上面可以绘制用户接口。窗口通常充满屏幕,但也可以...

    Android线程管理之ActivityThread

    它管理应用进程的主线程的执行(相当于普通Java程序的main入口函数),并根据AMS的要求(通过IApplicationThread接口,AMS为Client、ActivityThread.ApplicationThread为Server)负责调度和执行activities、broadcasts...

    在线考试系统文献综述

    JSP被认为是最有发展前途的动态网站技术,是未来开发动态网站的主流技术,与其它技术相比有一定的优势,如JSP页面可重用跨平台的组件(JavaBean或Enterprise JavaBean)来执行应用程序所要求更为复杂的处理,能将页面的...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    Activity Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务,是一个负责与用户交互的组件 SSH 为 Struts+Spring+Hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架。...

Global site tag (gtag.js) - Google Analytics