zoukankan      html  css  js  c++  java
  • Android开发历程_3(Activity生命周期)

             Activity中有7个与生命周期有关的函数。其中onCreated()是activity第一次被启动时执行的,主要是初始化一些变量,onRestart()是当前activity重新被启动时调用的;绑定一些监听器等;onStart()是activity界面被显示出来的时候执行的;onResume()是当该activity与用户能进行交互时被执行;onPause()是另一个activity被启动,当前的activity就被暂停了,一般在该函数中执行保存当前的数据;onStop()表示另一个activity被启动完成时,当前activity对用户同时又完全不可见时才调用的;onDestroy()是退出当前activity时调用的,当然如果程序中调用finish()或者说android系统当前资源不够用时就会被调用。

       当用多个activity在执行时,这时候android系统会自动将这些activity压入栈中并且总是显示最顶的那个activity,这个栈在android叫做task,但是这个栈只支持压入和弹出操作,不支持排序插入等操作。

       Activity的7个生命周期函数中的onStop()函数被调用时是在其对应的activity被另外的activity完全遮挡的时候,如果只有部分遮挡,则不会被调用。部分遮挡一般是以消息activtiy的形式出现,这个只需在AndroidManifest.xml中将其对于的activity的主题设置theme中更改即可。

       这7个周期函数,当系统资源不够时,其中onPause(),onStop(),onDestroy()是有可能被系统kill掉的,但其它4个是不会被kill掉。

         每次启动一个activity,都会将activity对象压入栈Task中;应用程序永远显示的是栈的顶部的activity对象;Task里面的对象可以属于不同的应用程序;如果某个activity调用了finish()函数后,该activity就不会保留在Task内部了;因此当点击返回按钮时,就不会返回前面的activity了;
        Task的作用是可以把不同应用程序的activity组织在一个栈内;
        Task只有2个操作,压栈和入栈,没有插入和排序的功能;
        发送短消息的activity是另一个应用程序,系统自带的,可以通过intent来调用;
        在资源有限时,android操作系统会关闭一些它认为不太重要的activity(即应用程序被杀掉);
        窗口风格的activity需要在AndroidManifiest.xml中进行窗口风格的设置,比如android:theme="@android:style/Theme.Dialog";
     

       参考资料为mars老师的资料。

            官方给出关于这7个生命周期的图如下:

      

               下面这个实验是有2个activity,第1个activity中有一个按钮调用第2个activity,并且每个activity都重写了这7个生命周期函数,每个生命周期中打印出一条语句,以表示是是哪个activity在执行哪个生命周期函数。

               实验过程当显示出了第1个activity后,单击Next Activity!按钮,这是会显示第2个activity,然后又按系统的返回键,返回第1个界面。

        这时候打印出来的结果如下图所示:

        

               由此可见,一开始程序运行时是首先调用第1个activity的onCreate(),onStart(),onResume()函数,然后按下button后,调用第1个activity的onPause(),和第2个activity的onCreate(),onStart(),onResume()函数,然后接着调用第1个activity的onStop(),当按下系统返回键时,这时会调用第2个activity的onPause(),接着是第1个activity的onRestart(),onStart(),onResume(), 最后是调用第2个的onStop()和onDestroy().

               界面1如下所示:

        

               界面2如下所示:

        

    MainActivity.java:

    package com.example.lifeone;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    
    public class MainActivity extends Activity {
    
        private Button btn;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            btn = (Button)findViewById(R.id.next_activity);
            btn.setText(R.string.next_activity);
            System.out.println("first activity: onCreate()");
            btn.setOnClickListener(new MyNextActivity());
        }
        @Override
        protected void onDestroy() {
            System.out.println("first activity: onDestroy()");
            super.onDestroy();
        }
        @Override
        protected void onPause() {
            System.out.println("first activity: onPause()");
            super.onPause();
        }
        @Override
        protected void onRestart() {
            System.out.println("first activity: onRestart()");
            super.onRestart();
        }
        @Override
        protected void onResume() {
            System.out.println("first activity: onResume()");
            super.onResume();
        }
        @Override
        protected void onStart() {
            System.out.println("first activity: onStart()");
            super.onStart();
        }
        @Override
        protected void onStop() {
            System.out.println("first activity: onStop()");
            super.onStop();
        }
    
        class MyNextActivity implements OnClickListener
        {
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setClass(MainActivity.this, SecondActivity.class);
                MainActivity.this.startActivity(intent);
            }
                    
        }
    }

    SecondActivity.java:

    package com.example.lifeone;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    
    public class SecondActivity extends Activity {
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            System.out.println("second activity:onCreate()");
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_second);
        }
    
        @Override
        protected void onDestroy() {
            System.out.println("second activity: onDestroy()");
            super.onDestroy();
        }
        @Override
        protected void onPause() {
            System.out.println("second activity: onPause()");
            super.onPause();
        }
        @Override
        protected void onRestart() {
            System.out.println("second activity: onRestart()");
            super.onRestart();
        }
        @Override
        protected void onResume() {
            System.out.println("second activity: onResume()");
            super.onResume();
        }
        @Override
        protected void onStart() {
            System.out.println("second activity: onStart()");
            super.onStart();
        }
        @Override
        protected void onStop() {
            System.out.println("second activity: onStop()");
            super.onStop();
        }
      
    }

     

    作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 欢迎转载或分享,但请务必声明文章出处。 (新浪微博:tornadomeet,欢迎交流!)
  • 相关阅读:
    Sql Server 2008卸载后再次安装一直报错
    listbox 报错 Cannot have multiple items selected when the SelectionMode is Single.
    Sql Server 2008修改Sa密码
    学习正则表达式
    Sql Server 查询第30条数据到第40条记录数
    Sql Server 复制表
    Sql 常见面试题
    Sql Server 简单查询 异步服务器更新语句
    jQuery stop()用法以及案例展示
    CSS3打造不断旋转的CD封面
  • 原文地址:https://www.cnblogs.com/tornadomeet/p/2614080.html
Copyright © 2011-2022 走看看