activity
是 Android
系统四大应用组件之一,其它三个为 Service
(服务) 、BroadcastReceiver
(广播)、ContentProvider
(内容提供器)。
android中一个app的入口是
activity
,一个app至少要有一个activity
,否则该app无法打开。activity
通常是一个单独的窗口。activity
一般通过Intent
通信。
-
所有的组件在使用时都要在Manifest中注册,activity注册方法为:
<activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
其中
intent-filter
为过滤器,其中声明表示了该activity
响应主操作且置于launcher
类别内,即打开app的时候会开启此activity
。<action>
元素指定这是应用的主入口点。<category>
元素指定此activity
应列入系统的应用启动器内,以便用户启动该activity。
生命周期
activity
是向用户展示界面的类,同时所有的用户与手机的交互也大都在这个类里面进行初始化等一系列操作,同时activity
也有不同的状态,可分为以下几类:
onCreate
onStart
onResume
onPause
onStop
onDestroy
onRestart
以下是activity的生命周期流程图。

onCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
onCreate
在 activity
第一次启动时调用,用于初始化 activity
。
这是基本的 onCreate
方法。可以看出,其中setContentView(R.layout.activity_main)
方法将activity
与界面布局联系到了一起,其中 R.layout.activity_main
是与activity
相对应的布局文件,一般这个文件在 res/layoout
这个文件夹里面,可以说所有的布局文件,都存在于这个文件夹里面。同时还有一个参数Bundle savedInstanceState
,这个参数用于activity
意外退出之后的数据恢复。
onStart
在这种状态下,activity
处于非前台状态,但有可能是可见的,比如在一个activity
中开启一个dialogActivity
,那么dialogActivity
处于前台状态,之前的activity
可见,但是也仅限于可见,不能对其进行操作,称之为非前台状态。
onResume
在这个阶段,activity
真正处于与用户进行交互的阶段,每次activity
从不可操作到可操作,都会调用这个方法,我们可以在这个函数里面进行一些需要自动刷新的事件。同时activity
有时会频繁转入转出前台,这样为了界面转变的流畅性,不应在这里进行比较耗时的事件。
onPause
与onResume
相对应,当activity
由前台转为非前台的时候,会调用这个方法。
onStop
这时activity
处于不可见状态,被视为处于“后台”,调用此方法之后,activity
实例的所有变量信息将会保存,但无法执行任何代码。
onDestory
activity
结束,回收所有的内存,并在此阶段调用onSaveInsanceState()
方法,用户结束时保存信息。
以下是各阶段的详细介绍。
跳转
-
显示跳转
Intent intent = new Intent(FromActivity.this,ToActivity.class); FromActivity.this.startActivity(intent);
其中
FromActivity
是当前所在activity
,ToActivity
是要跳转到的activity
。 -
隐式跳转
Intent intent = new Intent(); intent.setAction("com.intent.action.LOGIN"); intent.addCategory("com.intent.category.LOGIN"); startActivity(intent);
其中的
action
和category
要与在Manifest
中声明的一致,用于从这些参数映射到相对应的activity
。隐式跳转用于不知道某activity的名称,但知道其指定的action和category的activity,比如在app中打开相机拍照,我们一般使用的时候并不知道负责拍照的activity的名字,所以我们都是使用
int OPEN_CAMERA = 1; Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra("output",uri); startActivityForResult(intent, OPEN_CAMERA);
这段代码的意思就是你告诉系统,你需要调用一个相机,并把从相机中拍到的照片传到uri里面。一个手机里面可能有很多相机
activity
,比如手机自带的相机,或者一些其他什么的相机,这时系统就会弹出一个选择框,选出你要用的相机,同时也有可能某位同学手抖了抖,把手机root之后删掉了系统自带的相机,这时系统就会向你抱怨说,它没有相应的程序来用。由此我们可以看出,使用隐式跳转可以更方便的对手机功能进行扩展,我们只需要写一份筛选性质的代码,让系统把所有符合我们条件的
activity
列出来,我们再在其中选择。