Android学习笔记(44):Activity

Activity为我们提供一个可进行交互的窗口。当activity类创建了一个窗口,开发人员可以通过setContentView(View)接口把UI放到activity创建的窗口上。

开发应用时我们需要继承Activity或者是它的子类。

Activity的生命周期:

下图已经清楚的展示出Activity的生命周期了,我们结合下图再进行一些解释。

全生命周期:onCreate()->onDestroy()

在onCreate()中初始化Activity所能使用的全局资源和状态,在onDestroy()中释放这些资源。

可视生命周期:onStart()->onStop()以及onRestart()

这个过程是界面从可见到不可见的过程,但并不是全程都是允许交互的。onStart()一般用于初始化或启动与界面更新相关的资源,onStop()一般用于暂停和停止与更新界面相关的线程、计时器和服务。

活动生命周期:onResume()->onPause()

该过程中Activity在屏幕的最顶层,并且能够与用户发生交互。该周期的两个函数会频繁地被使用,所以这两个方法中应该尽量是简单、高效的代码。

另外两个方法:onRestoreInstanceState()和onSaveInstanceState() 

不属于?命周期的事件回调函数,但可以?于保存和恢复Activity的界?临时信息

onSaveInstanceState()会将界?临时信息保存在Bundle中,onCreate()和onRestoreInstanceState()都可以恢复这些保存的信息。

简化的办法是使?onCreate() 恢复,但有些特殊的情况下还是需要使?onRestoreInstanceState()函数恢复 :

■ 必须在界?完全初始化完毕后才能进?的操作

■ 或需要由?类来确定是否采?缺省设置等

Activity的配置:

四大组件都是需要我们显式配置的。Activity就在<application…/>里面加个<activity…/>。

我们着重讲一下Activity配置时候常用的几个属性:

name:指定该Activity的实现类的类名。

icon:图标。

label:标签。

exported:是否允许被其他应用调用。

launchMode:启动模式,可选项有standard、singleTop、singleTask、singleInstance。

下面着重说下Activity的启动模式(launchMode)

以前总是以为Activity有一个Activity栈,Activity们就这样FILO,原来是自己太na?ve。

standard:每次启动Activity都会产生新的实例,并加到栈中。

singleTop:与standard类似,不同的是,当启动的Activity刚好处于栈顶时,不产生新的实例,而是直接复用栈顶的这个实例。

singleTask:有与前面两个相同的处理方式,不同的是,当要启动的Activity不处于栈顶的时候但是处于栈中的时候,会移出这个Activity实例上面的所有实例,把需要启动的Activity置于栈顶。

singleInstance:每次启动新的Activity都会产生实例并放在一个新的栈中,每次启动存在的Activity都会直接复用存在的实例。

Activity的跳转:

启动Activity的方法有:(先说显式启动,隐式启动后面会介绍)

startActivity(Intent intent)和startActivityForResult(Intent intent,int requestCode)

第二个方法的第二个参数requestCode为请求码,用于标识启动请求的来源。

记得要在配置文件配置Intent,虽然大多数时候都不需要我们自己去做。

关闭Activity的方法:

finish()和finishActivity(int requestCode)

这两个方法分别于前面两个启动方法相对应。

在关闭Activity的方法被调用前我们常常还会用到下面这个函数:

void setResult( int ResultCode, Intent data)

参数:

结果码ResultCode:表明?Activity的返回状态 ,通常为为Activity.RESULT_OK或  Activity.RESULT_CANCELED,也可以是自己定义的其他整型。

返回值data:?Activity需要返回的数据传递。

子Activity关闭时,我们可以在父Activity中通过重写public void onActivityResult   (int requestCode, int resultCode, Intent data)方法来接受子Activity的请求码、返回状态和数据。

Activity之间的数据传递:

Intent充当信使为我们传递数据,我们只需要把需要传递的数据放到Intent上就好了。Intent存取数据的方法:

putExtras(Bundle data)

Bundle getExtras()

putExtra(String key,Xxx value):其实会隐式地产生一个Bundle。

Xxx getXxxExtra(String key)

Bundle可以理解为一个数据包,用来装各种各样的数据,除了在这里,我们在使用Message在同一个Activity的不同线程传递数据时,也会用到Bundle。

Bundle存取数据的方法:

putXxx(String key,Xxx data)

getXxx(String key)

putSerializable(String key,Serializable data) :Serializable指一个可序列化对象,比如一个类的实例。

getSerializable(String key)

隐式启动Activity

应用场景比如你要打开一个文档,但你的手机中有一个或者好几个可以打开文档的应用,这时系统会自动为你匹配可以打开文档的应用,你选择一个来打开文档,就是隐式地启动了一个Activity。

应用本身没有指定启用那个Activity,而是由系统来决定。这种做法很好的降低了组件之间的耦合度、提高了组件的可复用性。

系统会自动匹配合适的Activity,其中的匹配机制是依靠Android系统中的Intent过滤器(Intent Filter)来实现的。

这部分的内容较复杂,我们下一篇博客单独来介绍。

时间: 2024-10-27 17:47:31

Android学习笔记(44):Activity的相关文章

android学习笔记(6)Activity高级+android:theme学习

对应若水老师的第九课 一,保存activity的状态 当手机横屏的时候,系统调用了destroys和recreates,如果没有保存activity的状态,就会丢失用户的数据. 下面两片代码实现保存activity的状态: private EditText txt = null; //布局中有个输入框,引用给txt private static final string CONTENT = "content"; txt=(EditText)findViewById(R.id.txt);

android学习笔记(5)Activity生命周期学习

对应若水老师视频教程第8课 一定要看这个视频 每个activity都有它的生命周期,开启它,关闭它,跳转到其它activity等等,都会自动调用以下某种方法.对这些个方法覆写后观察学习. protected void onCreate(Bundle savedInstanceState); protected void onStart(); protected void onRestart(); protected void onResume(); protected void onPause(

Android学习笔记:Activity生命周期详解

进行android的开发,必须深入了解Activity的生命周期.而对这个讲述最权威.最好的莫过于google的开发文档了. 本文的讲述主要是对 http://developer.android.com/training/basics/activity-lifecycle/index.html 的翻译,加上了个人的一些细节和补充. 一.总体介绍

Android 学习笔记之五 activity lanuch mode

launchMode在多个Activity跳转的过程中扮演着重要的角色,它可以决定是否生成新的Activity实例,是否重用已存在的Activity实例,是否和其他Activity实例公用一个task里.这里简单介绍一下task的概念,task是一个具有栈结构的对象,一个task可以管理多个Activity,启动一个应用,也就创建一个与之对应的task. Activity一共有以下四种launchMode: 1.standard    默认的启动模式,在同一个任务栈统启动一个新的activity

android学习笔记28——Activity生命周期

Activity生命周期 Activity的活动状态由android已Activity栈的形式管理,当前活动的Activity位于栈顶.随着不同应用的运行,每个Activity都有可能从活动状态转入非活动状态,从非活动状态转入活动状态. Activity归纳大致会经过4个状态: 1.活动状态:当前Activity位于前台,用户可见,可获得焦点: 2.暂停状态:其他Activity位于前台,该Activity可见,不可获得焦点: 3.停止状态:该Activity不可见,失去焦点: 4.销毁状态:该

Android学习笔记-Activity&Intent

界面activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="matc

Pro Android学习笔记(一三七):Home Screen Widgets(3):配置Activity

文章转载仅仅能用于非商业性质,且不能带有虚拟货币.积分.注冊等附加条件.转载须注明出处http://blog.csdn.net/flowingflying/以及作者@恺风Wei. 通过widget定义.我们在widget列表中看到了我们的TestWidget.当我们拖拽widget到主页时.假设在appwidet-provider中定义了android:configure的java类,在widget实例创建后会立即唤起配置activity.这个activity主要完毕两个任务:1.配置初始化数据

Android学习笔记?从零开始?第三天?Activity

Android学习笔记?从零开始?第三天?Activity 转载请注明出处:CLeopard http://blog.csdn.net/cleopard 今天主要是对Activity的学习. –>点击进入Android学习笔记导图 http://blog.csdn.net/cleopard/article/details/44037813 –>19本Android经典教程+104个Github上火爆项目开源源码 http://download.csdn.net/album/detail/151

android学习笔记——利用BaseAdapter生成40个列表项

RT: main.xml ? 1 2 3 4 5 6 7 8 9 10 11 12 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"               android:orientation="vertical"