Activity

来源:互联网 发布:java获取post请求数据 编辑:程序博客网 时间:2024/04/28 00:46

本文转自http://blog.csdn.net/vanpersie_9987/article/details/51301748

Activity是一个类,他是Android呈现界面的载体,用于与用户操作交互,如拨号、照相、发送文件等,每个Activity都承载了一个window,这个Window用来绘制UI。一般情况下,该Window铺满整个屏幕,有时候,他也可以悬浮在其他window之上。

通常,一个Android应用程序可包含多个Activity,每个Activity之间耦合较松,一般都有一个主Activity,用于在启动Activity,每个Activity都可以启动其他Activity,每当一个新的Activity被启动,原Activity就会处于stop状态,并把该Activity实例保存在后退栈中,新的Activity被装入后退栈中并获得焦点。后退栈的存储机制是后进先出,所以当用户点击返回键时,顶端的Activity将从栈顶弹出,并被destory,处于stop状态的Activity进入resume状态。

当一个新Activity启动时,原来的Activity将处于stop状态,系统会回调onStop()方法,在这个过程中,Activity将回调其相对应的生命周期方法来改变状态,Activity有若干个生命周期回调方法,在每个方法中,可以做一些相对应的工作,比如当Activity进入stop状态时,系统会回调onStop()方法,在这里面可以释放一下大的对象,如网络数据库连接,当Activity进入resume状态时,系统会回调onResume方法,在这个方法中,可以获得一些重要的资源。


一、创建Activity

为了创建一个Activity,必须继承Activity类,并重写生命周期方法,如onCreate(),onStop(),onResume(),onDestory()等。

其中最重要的回调方法为

(1)onCreate():必须重写该方法,系统会在创建Activity时回调,在该方法中,可以进行一些必要的初始化组件,另外,必须调用setContentView()方法绑定视图。

(2)onPause():当Activity由不可见变为可见时,系统会回调该方法。在该方法中,应对用户的改变操作做一些持久化保存。


二、绑定UI

Activity承载的UI由一系列嵌套的View组成,这些View都继承于View类,每个View都控制着一个长方形区域,并与用户交互。

Android内置了大量的View,你可以定制View的布局。ViewGroup也继承于View类,他负责View的布局。

最普遍的定义布局方式是在资源文件夹中创建XML布局文件,通过这种方式,你可以降低布局与Activity之间的耦合。


三、在Activity标签中使用intent-filter

若你希望activity只能由自己的应用程序启动的话,那么不要为这个Activity设置intent-filter。


四、终止Activity

调用finish()可以手动终止Activity,也可以调用finishActivity()方法手动终止之前启动而不在前台的activity


五、Activity生命周期

1、onCreate():当Activity第一次启动时回调,可为Activity做静态初始化,如初始化view,为ListView绑定数据等,该方法回传一个Bundle,该参数保持了上次在Activity中存储的信息。

2、onRestart():Activity处于stop状态而准备重新启动时。

3、onStart():当Activity处于可见状态时,Activity实例刚被压入栈

4、onResume():在用户处于可交互状态之前回调

5、onPause():在其他Activity准备启动之前调用,一般会在该方法对一些数据进行持久化保存,停止动画等,在该方法中执行的操作不能过于繁琐,否则会影响新的Activity创建。

6、onStop():UI界面不再可见时回调

7、onDestory():Activity实例销毁时调用,可能是开发者调用finish()方法,也可能是系统的内存紧张而回调,你可以调用isFinish()方法判断是上述哪种情况导致的onDestory()被回调。


六、保存Activity状态

当系统回调onPause()或者onStop()方法时,Activity实例在内存中依然可见,所以当Activity重新可见时,Activity中的数据仍然可以原封不动的显示出来,然而Activity有时候会因为系统内存不足而被回收,当Activity再被重新创建时,系统将无法保证之前在界面中输入的数据可被完整的恢复,这个时候就需要重写onSaveInstanceState()方法对数据进行保存。

onSaveInstance()方法一般在Activity实例即将被系统回收时调用,你可以在该方法回传的Bundle参数中保存键值对格式的数据,接着当内存紧张或者屏幕转屏等原因被销毁时,该Bundle会回传至onCreate()和onRestoreInstanceState()中。

onCreate和onRestoreInstanceState的区别在于:前者每次初始化Activity都会被回调,所以回传的Bundle参数可能为null,而后者不可能为null。

onSaveInstance()方法并非一定在destory之前调用,当用户点击后退键主动退出Activity时,onSaveInstanceState()可能在onStop()甚至是onPause()前调用。

在实际开发中,推荐重写onSaveInstanceState()方法以保存额外的重要信息,并在保存信息之前先调用父类的onSaveInstanceState()方法


请注意 :由于onSaveInstanceState()并不能保证一定回调,所以一般使用onSaveInstanceState()方法保存一些UI界面上的即时信息,而不应该用于保存持久化的内容,应在 onPause()中保存。

0 0
原创粉丝点击