Activity引言
在Android中,一个Acitvity作为一个显示在屏幕上的用户交互界面。比如在电子邮件应用中,一个用来显示收件列表的Activity,一个用来写邮件的 Activity,一个阅读邮件内容的Activity等等。Activity用来提供用户体验,许多不同体验的Activity聚集在一起即可以形成 一个Android应用程序的用户体验,每一Activity都是相互独立的。应用除了可以访问自己的Activity,也可以访问其他Application的 Acitivity(这个取得其它Application的权限)。在Android应用中,可以有多个Activity,这些Activity组成了Activity stack,当前活动的Activity位于topStack,之前的Activity被压入下面,成为非活动Activity,等待是否可能被恢复为活动状态。下面来介绍Activity的几个生命状态。
2.Activity的几个回调方法
1).onCreate()
当Acitivity第一次被创建时触发,一般在这里要做的事情包括创建视图(setContentView())、向视图填充必要的数据等等。此方法必须要重写。
2). onRestart()
这个我比较少用到,按文档上的介绍,如果Activity之前被stop过,那么下一次onStart()方法之前会先触发这个方法。
3).onStart()
只要Activity从不可见变成可见,就会触发到这个方法,但被AlertDialog遮挡/显示的情况不算在内。
4).onResume()
当Activity来到最上层的时候,也就是开始与用户直接交互时,触发这个方法。例如本来Activity被一个AlertDialog遮挡,当这个AlertDialog消失时,onResume()方法就被触发。
5).onPause()
和onResume()的触发条件刚好相反,如果Activity本来在最上层,当它要让出最上层的位置时会触发这个方法。onPause()和onResume()是被触发最频繁的两个方法,所以在这里不应该执行过于消耗资源的方法。
6).onStop()
当有其他Activity覆盖了当前Activity时,不论另一个Activity是新开始的还是从下层移至最上层的,当前Activity的onStop()方法都会被触发。当系统任务用户离开此界面时会调用此方法,此时并非销毁一个Activity。通常在这里就要处理一些持久超越用户会话的变化,比如:数据的保存。
7).onDestroy()
Activity生命周期的终点。有两种情况会导致它被触发:
(1)执行了Activity.finish()方法;
(2)Android系统由于资源 不足等原因决定杀掉Activity所在进程。通过isFinishing()方法可以判断出是哪种情况。在这个方法里,我们一般要做的事情是释放 Activity占有的资源,例如后台正在进行的下载线程等等。
3.实例
(1)创建Activity
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);//设置Activit的布局
}
(2)配置Activity
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
/*多种属性
android:icon="图标"
android:name="实现类"
android:theme="应用的主题"
android:label="说明性文字"
android:
android:
.......
*/
<activity>还提供各种intent-filter,使用<intent-filter>来声明其它应用组件如何激活(启 动)Activity,<intent-filter>有包含<action>和<category>两个元素。
如上例中<action android:name="android.intent.action.MAIN" />用来表示此Activity需要响应android.intent.action.MAIN(表明为应用程序的主要入口),<category android:name="android.intent.category.LAUNCHER" /> 表示Activity为LAUNCHER类别,即应用程序会列在Launcher中,允许用户直接启动。以上也是一个应用的主activity 所必须的声明方法:一个MAIN action,和一个LAUNCHER category。如果要Activity响应其他应用的隐式的intent,则需要为Activity声明对应action,还可以添加categor 和data。
(3)启动Activity
Intent intent=new Intent(MainActivity.this, AboutActivity.class);
startActivity(intent);
(4)关闭Activityhttp://my.oschina.net/u/1433837/admin/new-blog
Activity可以调用finish()方法关闭自己,也可以通过调用finishActivity()的方法关闭一个独立的之前启动的Activity。关于何时关闭一个Activity,一般由系统直接为我们管理。但是当你确认用户不用返回到此Activity时,我们调用以上方法关闭对应的Activity。
第一种方法是调用其本身的finish()方法
//关闭Activity
finish();
第二种方法调用finishActivity()的方法关闭一个独立的之前启动的Activity。
//此方法用在关闭使用startActivityForResult(requestCode)启用的Activity
this.finishActivity(requestCode);