现在的位置: 首页 > 移动开发 > 正文

android 四大组件之activity

2017年11月14日 移动开发 ⁄ 共 1996字 ⁄ 字号 评论关闭

Activity是一个独立的,可以与用户交互的android应用组件。他是一个功能强大的界面管理者,他负责调度各种界面视图,帮助开发人员完成android应用与用户之间的交流。Android应用就像一出戏,activity就是其中的一幕,用户界面就是舞台,Activity不仅仅要负责舞台上的表演,还要负责相关的灯光,音乐等,协调各个部分把戏演好。

一、Activity的生命周期

Activity 组件和java EE中的Servlet 组件一样,属于托管代码,即它的创建和销毁不是由组件自身或者用户来决定的,而是由它的运行的环境,或者说是容器决定。

        Activity的生命周期:  onCreate()——>onResume()——>onPaused()——>onStop()——>onDestory().

注意:①如果activity在运行过程中发生意外,activity会被立即强制退出,而不会有机会执行任何生命周期方法。

②当设备冲横屏切换到竖屏时,android会将当前的activiity销毁,重新创建一个新的activity。OnCreate被重新执行。解决办法是:在AndroidMainfest,xml中配置一下activity属性:
android:configChanges="orientation|keyboardHidden";
二、Activity的管理
Android系统中可以运行多个android应用,每个andorid应用又可以包含多个activity,那个android是如何管理这些activity的呢?事实上,android是通过栈的方式来管理的activity的。当用户打开一个activity,就会把当前的activity压入栈顶;当用户操作返回按钮,就相当于把当前的activity销毁,则此activity将从栈中抛出。
为什么采用这种堆栈的方式来管理activity呢?这是由于android特有的运行环境和运行方式决定的,因为手机屏幕狭小,每次只能显示一个activiy用户界面,所以,android按照使用时间从近到远的顺序将屏幕对应的activity保存在堆栈中,使得系统中的程序得到最合理的缓存,将大大提高系统的响应速度。
三、activity状态维护
对于处理Paused或stoped状态下的activity,android会保存它的内部状态变量。但是,当系统资源紧张时,activity很可能会被杀死,以便回收系统资源。这种情况下,当activity再次被请求时,activity将重新被创建。
解决办法:
//在onSaveInstanceSate方法中
public void onSaveInstanceSate(Bundle state){
      super.onSaveInstanceSate(sate);
      state.putInt("id",1);
      state.putString("name","tom");  
}
        //在OnCreate方法中
public void OnCreate(Bundle state){
if(sate!=null){
int id = state.getInt("id");
int name = state.getString("name");
}
}
四、activity的启动模式
在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作。在Android中Activity的启动模式决定了Activity的启动运行方式。

    Activity启动模式设置:
	<activity android:name=".MainActivity" android:launchMode="standard" />
    Activity的四种启动模式:
	1. standard:模式启动模式,每次激活Activity时都会创建Activity,并放入任务栈中。
	2. singleTop:如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例)。
	3. singleTask:如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。 
	4. singleInstance:在一个新栈中创建该Activity实例,并让多个应用共享改栈中的该Activity实例。一旦改模式的Activity的实例存在于某个栈中,任何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中。

        

抱歉!评论已关闭.