四大组件之Activity小结

一大波面试就要靠近,赶紧总结总结一些基础问题

1、Activity的概念

Android应用层开发的四大组件之一,主要负责和用户交互部分,有自己的生命周期,在其上可以布置按钮,文本框等各种控件,简单来说就是Android的UI部分,

注1:Activity之间通过Intent进行通信。(在Intent 的描述结构中,有两个最重要的部分:动作和动作对应的数据)

注2:Activity与View的区别
1)     Activity是四大组件中唯一一个用来和用户进行交互的组件。可以说Activity就是android的视图层。
2)     如果再细化,Activity相当于视图层中的控制层,是用来控制和管理View的,真正用来显示和处理事件的实际上是View。
3)     每个Activity内部都有一个Window对象, Window对象包含了一个DecorView(实际上就是FrameLayout),我们通过setContentView给Activity设置显示的View实际上都是加到了DecorView中。
当一个Activity被kill之前它可以调用onSaveInstanceState来保存当前Activity的状态信息

2、Activity的生命周期

上一张经典的图来感受一下

【onCreate】

;当Activity第一次被实例化的时候系统会调用,,整个生命周期只调用1次这个方法,通常用于初始化设置: 1、为Activity设置所要使用的布局文件2、为按钮绑定监听器等静态的设置操作

【onStart()】

当Activity可见未获得用户焦点不能交互时系统会调用
       
【onRestart()】

当Activity已经停止然后重新被启动时系统会调用
       
【onResume()】

当Activity可见且获得用户焦点能交互时系统会调用
         
【onPause】

当系统将要启动另一个 Activity时调用。此方法主要用来将未保存的变化进行持久化,停止类似动画这样耗费CPU的动作等。

比如:

(1)当系统而不是用户自己出于回收内存时,关闭了activity 之后。用户会期望当他再次回到这个activity 的时候,它仍保持着上次离开时的样子。此时用到了onSaveInstanceState(),方法onSaveInstanceState()用来保存 Activity被杀之前的状态,在onPause()之前被触发,

(2)当系统为了节省内存销毁了Activity(用户本不想销毁)时就需要重写这个方法 了,当此Activity再次被实例化时会通过onCreate(Bundle savedInstanceState)将已经保存的临时状态数据传入因为onSaveInstanceState()方法不总是被调用,触发条件为(按 下HOME键,按下电源按键关闭屏幕,横竖屏切换情况下),应该仅重写onSaveInstanceState()来记录activity的临时状态, 而不是持久的数据。应该使用onPause()来存储持久数据。
     
【onStop】

当Activity被新的Activity完全覆盖不可见时被系统调用
           
【onDestroy()】

当Activity(用户调用finish()或系统由于内存不足)被系统销毁杀掉时系统调用,(整个生命周期只调用1次)用来释放onCreate ()方法中创建的资源,如结束线程等
      

3、4种启动模式

首先必须说明是Activity是以栈的形式存放的。

【standard】    

默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。即不管有没有已存在的实例,都生成新的实例

【singleTop】   

可以有多个实例,但是不允许多个相同Activity叠加。即如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。

【singleTask】
只有一个实例。在同一个应用程序中启动它的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。如果是在别的应用程序中启动它,则会新建一个task,并在该task中启动这个Activity,singleTask允许别的Activity与其在一个task中共存,也就是说,如果我在这个singleTask的实例中再打开新的Activity,这个新的Activity还是会在singleTask的实例的task中。
【singleInstance】    只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。

关于onNewIntent方法截个图说明一下

具体在方式需要在清单文件中配置

如:<activity android:name="com.example.mobilesafe.WatchDogActivity"
             android:launchMode="singleInstance"/>

4、Activity的启动方法

主要有俩种

【startActivity()】    在一个Activity中调用startActivity()方法。
直接启动Activity,不带请求码。
【startActivityForResult()】   在一个Activity中调用startActivityForResult()方法。
可以一次性完成这项任务,当程序执行到这段代码的时候,页面会跳转到下一个Activity,
而当这个Activity被关闭以后(this.finish()),程序会自动跳转会第一个Activity,并调用前一个Activity的onActivityResult( )方法
带请求码启动Activity。

注:其实startActivity()本质就是startActivityForResult(),在startActivity()源码中还是调用了startActivityForResult(),将其第二个参数设置为-1而已,因此他们本质上没啥区别,startActivity()只是将startActivityForResult()做了一个简单封装而已。

参考:http://blog.csdn.net/liuhe688/article/details/6754323

转自:http://blog.csdn.net/xsf50717/article/details/47344067

时间: 2024-09-15 19:14:01

四大组件之Activity小结的相关文章

Android四大组件之——Activity的开启:StartActivity()和StartActivityForResult()(图文详解)

      如需转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:JohnTsai.Work@gmail.com         [Android四大组件学习系列Activity篇]        1.Android四大组件之--Activity(一)定义.状态和后退栈(图文详解)        2.Android四大组件之--Activity的生命周期(图文详解)        3.Android四大组件之--Activit

Android四大组件之——Activity的生命周期(图文详解)

      转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:JohnTsai.Work@gmail.com       [Android四大组件学习系列Activity篇]       1.Android四大组件之--Activity(一)定义.状态和后退栈(图文详解)       2.Android四大组件之--Activity的生命周期(图文详解)      上一篇文章讲了Activity的定义.状态和后退栈,现在讲讲A

Android编程四大组件之Activity用法实例分析_Android

本文实例讲述了Android编程四大组件之Activity用法.分享给大家供大家参考,具体如下: 这里详细介绍如何创建Activity.生命周期.内存管理.启动模式. 创建Activity 一.定义Activity 1. 定义Activity 定义类继承Activity 2.在AndroidManifest.xml的节点中声明<activity> 显式意图创建Activity三种方式方式 //第一种方式:构造函数,代码少 Intent intent1 =new Intent(this,NewA

Android编程四大组件之Activity用法实例分析

本文实例讲述了Android编程四大组件之Activity用法.分享给大家供大家参考,具体如下: 这里详细介绍如何创建Activity.生命周期.内存管理.启动模式. 创建Activity 一.定义Activity 1. 定义Activity 定义类继承Activity 2.在AndroidManifest.xml的节点中声明<activity> 显式意图创建Activity三种方式方式 //第一种方式:构造函数,代码少 Intent intent1 =new Intent(this,NewA

Android四大组件之——Activity(一)定义、状态和后退栈(图文详解)

什么是Activity       关键字:应用组件.四大组件.用户界面,交互. An Activity is an application component that provides a screen with which users can interact in order to do something       每个Android应用打开,一般都有界面与用户进行交互,以完成输入,输出等一些功能.提供这个功能的就是Android四大组件之一,Activity.       Acti

四大组件之 BroadcastReceiver小结

总结提高,与君共勉 1. BroadcastReceiver是什么? BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来接收来自系统和应用中的广播.主要体现在: (1)当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能: (2)  当锁屏或者点亮屏幕时就会产生一条广播,接收这条广播就可以实现一些暂停或者开启一些耗电进程的功能. (3)  当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作: (4) 

四大组件之ContentProvider小结

总结提高,与君共勉 1.什么是Content Provider 内容提供器( Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访数据安全性.目前,使用内容提供器是 Android 实现跨程序共享数据的标准方式. 对数据使用者来说它是数据提供者.它提供统一的接口对数据进行操作,使用者不用关心数据到底是如何存储的以及数据类型到底是什么.也就是说,Content Provider作为数据提供者,提

Android应用程序四大组件之使用AIDL如何实现跨进程调用Service_Android

一.问题描述 Android应用程序的四大组件中Activity.BroadcastReceiver.ContentProvider.Service都可以进行跨进程.在上一篇我们通过ContentProvider实现了不同应用之间的跨进程调用,但ContentProvider主要是提供数据的共享(如sqlite数据库),那么我们希望跨进程调用服务(Service)呢?Android系统采用了远程过程调用(RPC)方式来实现.与很多其他的基于RPC的解决方案一样,Android使用一种接口定义语言

Android应用程序四大组件之使用AIDL如何实现跨进程调用Service

一.问题描述 Android应用程序的四大组件中Activity.BroadcastReceiver.ContentProvider.Service都可以进行跨进程.在上一篇我们通过ContentProvider实现了不同应用之间的跨进程调用,但ContentProvider主要是提供数据的共享(如sqlite数据库),那么我们希望跨进程调用服务(Service)呢?Android系统采用了远程过程调用(RPC)方式来实现.与很多其他的基于RPC的解决方案一样,Android使用一种接口定义语言