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----");
    }

相关文章
|
调度 Android开发
深入剖析Android四大组件(八)——结束Activity的4个阶段(二)
深入剖析Android四大组件(八)——结束Activity的4个阶段(二)
221 0
深入剖析Android四大组件(八)——结束Activity的4个阶段(二)
Activity中,View#postDelay会导致内存泄漏,但是不会影响Activity的生命周期执行。
Activity中,View#postDelay会导致内存泄漏,但是不会影响Activity的生命周期执行。
|
Android开发 UED 开发者
探究活动Activity(2)界面跳转及生命周期
探究活动Activity(2)界面跳转及生命周期
293 0
探究活动Activity(2)界面跳转及生命周期
|
Android开发
深入剖析Android四大组件(八)——结束Activity的4个阶段(一)
深入剖析Android四大组件(八)——结束Activity的4个阶段(一)
271 0
|
Android开发
Android四大组件之一Activity的生命周期
Activity的生命周期给大家整理好了
96 0
Android四大组件之一Activity的生命周期
|
存储 Android开发
Activity的生命周期-典型情况下的生命周期
Activity的生命周期分为两部分内容,一部分是典型情况下的生命周期,另一部分是异常情况下的生命周期。所谓典型情况下的生命周期,是指在有用户参与的情况下,Activity所经过的生命周期的改变;而异常情况下的生命周期是指Activity被系统回收或者由于当前设备的Configuration发生改变从而导致Activity被销毁重建,异常情况下的生命周期的关注点和典型情况下略有不同。
554 0
Activity的生命周期-典型情况下的生命周期
|
API Android开发
Activity的生命周期
典型情况下的生命周期分析 Activity生命周期 activity 第一次启动 : onCreate -> onStart -> onResume 用户打开新activity,原activity的过程 : onPause -> onStop.
1436 0
|
Kotlin
我们真的了解 Activity 与 Fragment 的生命周期吗?
      小菜中午和朋友闲聊,被问到 Activity 与 Fragment 的生命周期,以为是很基础的东西,基本可以把生命周期说全,但是被问到 Activity 与 Fragment 交互的生命周期运行顺序,切换 Fragment 时候的生命周期顺序,以及切换完之后退出时的生命周期...瞬间感觉基础知识太不扎实了。
1070 0