zoukankan      html  css  js  c++  java
  • Activity学习(一):生命周期

    一、 认识Activity

    Activity是Android的四大组件之一,那么它是什么呢?如果简单的理解,可以把它当成应用的一个显示的屏幕。
    Activity类处于android.app包中,继承体系如下: 
    java.lang.Object 
    android.content.Context 
    android.app.ApplicationContext 
    android.app.Activity

    Activity是单独的,用于处理用户操作。开发人员可以通过 setContentView(View)接口把UI放到Activity创建的窗口上,大部分的 Activity子类都需要实现以下两个方法:
    onCreate(Bundle)方法是初始化Activity的地方. 在这儿通常可以调用setContentView(int)设置在资源文件中定义的UI, 使用findViewById(int) 可以获得UI中定义的窗口. 
    onPause()方法是使用者准备离开Activity的地方,在这儿,任何的修改都应该被提交(通常用于ContentProvider保存数据). 
    程序定义的Activity必须在AndroidManifest.xm文件中进行配置,否则不能使用。

    二、 Activity的生命周期

    2.1 首先我们看看Activity的生命周期图


    理解Activity的生命周期:

    public class FirstActivity extends Activity
    {
        private Button btn1;
        private Button btn2;
    
    
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            System.out.println("----onCreate----");
    
    
            setContentView(R.layout.main);
    
    
            this.btn1 = (Button) findViewById(R.id.btn1);
            this.btn1.setOnClickListener(new OnClickListenerImpl());
            this.btn2 = (Button) findViewById(R.id.btn2);
            this.btn2.setOnClickListener(new OnClickListenerImpl());
    
    
        }
    
    
        @Override
        protected void onStart()
        {
            super.onStart();
    
    
            System.out.println("----onStart----");
        }
    
    
        @Override
        protected void onRestart()
        {
            super.onRestart();
    
    
            System.out.println("----onRestart----");
        }
    
    
        @Override
        protected void onPause()
        {
            // TODO Auto-generated method stub
            super.onPause();
            System.out.println("----onPause----");
        }
    
    
        @Override
        protected void onResume()
        {
            super.onResume();
    
    
            System.out.println("----onResume----");
        }
    
    
        @Override
        protected void onStop()
        {
            super.onStop();
    
    
            System.out.println("----onStop----");
        }
    
    
        @Override
        protected void onDestroy()
        {
            super.onDestroy();
    
    
            System.out.println("----onDestroy----");
        }
    
    
        private class OnClickListenerImpl implements OnClickListener
        {
    
    
            @Override
            public void onClick(View v)
            {
                int id = v.getId();
                switch (id)
                {
                    case R.id.btn1:
                        Intent i1 = new Intent(FirstActivity.this, SecondActivity.class);
                        FirstActivity.this.startActivity(i1);
                        break;
                    case R.id.btn2:
                        Intent i2 = new Intent(FirstActivity.this, ThirdActivity.class);
                        FirstActivity.this.startActivity(i2);
                        break;
                    default:
                        break;
                }
            }
    
    
        }
    }




    接下来,我们测试,直接启动应用;


    这时,我们点击返回键:



    我们重启启动界面,点击第一个按钮,进入第二个界面,然后再点击返回按钮,可看到日志输出:



    我们修改ThirdActivity的样式,使其变成一个弹出框式的Activity,只需要再配置该Activity时指定:

    <activity
          android:name=".ThirdActivity"
          android:theme="@android:style/Theme.Dialog" ><span style="font-family: Arial, Helvetica, sans-serif;"></activity></span>

    接着,我们重启启动该应用,并点击btn2,可看到日志输出:


    我们可以看出,以为ThirdActivity是对话框风格的,所以启动后,FirstActivity并非不可见,只是失去了焦点,所以其并没有进入onStop()方法中,所以在返回到该Activity时,是直接进入了onResume方法,而并没有重启启动(onResult()和onStart()).


    三、 Activity生命周期的使用场景

    3.1 onDestory的应用:

    比如我们开发一个应用,需要用户输入数据,而如果用户一不小心把应用关闭了,那数据就丢失了。 所以,友好的应用应该是我们需要在onDestory()方法中,将用户输入的信息保存下来(文件中),然后在onCreate方法里,再把它取出来。


    3.2 onStart的应用:测试网络的环境:


    我们希望,当用户进入到界面上时,检查网络,如果网络不可用,则跳转到网络设置界面,而且,必须是用户设置网络成功后,才可行,不然就一直让用户设置网络。 此时,我们可以使用onStart方法,onStart方法是在Activity可见时调用的。

        @Override
        protected void onStart()
        {
            super.onStart();
    
            ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo info = cm.getActiveNetworkInfo();
            if (info != null && info.isConnected())
            {
                Toast.makeText(this, "网络可用", Toast.LENGTH_SHORT).show();
            }
            else
            {
                Toast.makeText(this, "网络不可用", Toast.LENGTH_SHORT).show();
                Intent intent = new Intent();
                intent.setClassName("com.android.setting", "com.android.setting.WirelessSettings");
                startActivity(intent);
            }
    
            System.out.println("----onStart----");
        }

  • 相关阅读:
    ios入门笔记(创建隐式首选项,实现系统设置,实现文件系统存储)
    ios开发(表视图)
    Android上使用OpenglES2.0遇到的一点问题
    Android平台对H264视频硬解码
    Java GC机制和对象Finalize方法的一点总结
    JVM GC之一找出不可达对象并回收
    docker 使用Data Volume 共享文件
    sscanf函数用法详解
    va_start和va_end使用详解
    NDK 的helloworld步奏
  • 原文地址:https://www.cnblogs.com/hehe520/p/6330025.html
Copyright © 2011-2022 走看看