zoukankan      html  css  js  c++  java
  • Activity的生命周期

    Activity的生命周期

          以往我们实现页面间的跳转都是实例化Intent类的对象,但是页面在我们眼前的出现与消失没有我们所看到的那么简单,它有一个复杂的生命周期,一个页面的出现,被覆盖,再次出现,被覆盖,甚至销毁.......这样周而复始的过程就是Activity的生命周期。下面是一张Activity的生命周期表:

    解释图例:

    1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。

    2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。

    3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。

    4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。

    5.用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。

    6.当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。

    7.用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。

    声明周期方法调用表:

    案例说明:实现三个界面之间的相互跳转,观察Activity的生命周期(只举一个Activity跳转的例子)

    第一步:定义三个Activity,实现父类的方法

    public class oneActivity extends Activity {
        private static final String TAG = "oneActivity";  
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.oneactivity_main);
            //获取事件源对象
            Button but = (Button)this.findViewById(R.id.one_two);
            Button but1 = (Button)this.findViewById(R.id.one_three);
        
                    //实例化DrawListener事件处理类的对象
            loginListener dl = new loginListener(this);
                    //给事件源设置触屏监听方法,指定事件处理类的对象dl
                but.setOnClickListener(dl);    
                but1.setOnClickListener(dl);            
        }
        @Override
        protected void onStart() {
            super.onStart();
             Log.i(TAG, " onStart~~~"); 
        }
        
        @Override  
        protected void onResume() {  
            super.onResume();  
            Log.i(TAG, " onResume~~~");  
        }  
        @Override  
        protected void onPause() {  
            super.onPause();  
            Log.i(TAG, " onPause~~~");  
        }  
    
        @Override
        protected void onStop() {
            super.onStop();
             Log.i(TAG, " onStop~~~"); 
        }
        @Override  
        protected void onRestart() {  
            super.onRestart();  
            Log.i(TAG, " onRrstart~~~"); 
            
        }  
        @Override
        protected void onDestroy() {
            super.onDestroy();
             Log.i(TAG, " onDestory~~~"); 
        }    
    }

    第二步:给键盘加上监听方法,有几个Activity就有几个监听方法,实现三个Activity之间的跳转

    public class loginListener implements android.view.View.OnClickListener {
        private oneActivity oa;
        public loginListener(oneActivity oa) {//构造方法传参
            this.oa = oa;
        }
        public void onClick(View v) {
                    // 获取事件源对象
                    Button but = (Button) v;
                    // 实例化Intent类的对象
                    Intent intent = new Intent();
                    if(but.getId()==R.id.one_two){
                        // 从第一个界面跳转到第二个界面
                        intent.setClass(oa, twoActivity.class);
                    }else{    // 从第一个界面跳转到第三个界面
                        intent.setClass(oa, threeActivity.class);
                    }    
                    // 使用mainActivity来启动页面的跳转
                    oa.startActivity(intent);
                    // ma.finish();//销毁当前ma对象
        }    
    }

    注意:在我的程序中,第三个Activity不是满屏的状态,设置界面不是满屏状态的方法如下:

    运行结果的分析:

     我的第一个Activity:

     我的第二个Activity:

     我的第三个Activity:

    从第一个Activity到第二个Activity:

    第一个界面先暂停,第二个界面就开始创建,开始,呈现在眼前,最后第一个界面就停止了。

    从第二个Activity到第三个Activity:

    注意第二个界面是暂停的,因为第三个界面不是全屏,第二个界面依然可以看到,所以是暂停,不是停止。

    从第三个Activity到第一个Activitty:

    第二个界面先停止,第一个界面开始从创建,启动到呈现在眼前,最后第三个界面停止。

    做一个返回的动作:(即又回到第二个和第三个界面叠加在一起的情况)

    第二个界面启动,第三个界面重新启动,启动,呈现在眼前,第一个界面就停止消失并且被撤销了。

    做一个Home的动作:

    第三个界面先暂停,第二个界面消失,然后第三个界面也消失了。

  • 相关阅读:
    代码规范圣战
    代码复审结果
    个人工程总结
    第一周个人博客作业
    软工课程总结
    软件工程课程的建议
    大泥球你好~
    第一次会议记录
    软件工程的瀑布, 大泥球, 教堂,集市,和银弹
    vs2013——单元测试&& 性能图
  • 原文地址:https://www.cnblogs.com/java-7/p/5738247.html
Copyright © 2011-2022 走看看