activity finish后没有destroy_Activity了解一下?

本文详细探讨了Android中Activity的生命周期,包括onCreate(), onStart(), onResume(), onPause(), onStop(), onRestart()和onDestroy()等关键方法。此外,还介绍了Activity的四种启动模式:standard, singleTop, singleTask和singleInstance,以及Activity的显式和隐式启动方式。文章最后讨论了屏幕旋转和内存管理对Activity生命周期的影响。" 114599184,10540366,Spring RestTemplate 消息转换问题及解决方案,"['Spring框架', 'RESTful API', 'Java开发', 'JSON序列化', 'HTTP客户端']
摘要由CSDN通过智能技术生成

    Android开发我们最先遇到的就是四大组件,下面我们就从这比较重要和必要的Activity先开始。

Activity生命周期

2cccdafb35369a50fe95beb366c548f0.png

     Activity的生命周期方法基本就已经囊括在上面的图里了,下面我们来了解一下其中的一些方法。

onCreate()     

    系统在创建Activity的时候会触onCreate()方法,构建视图,通过setContentView设置页面的视图资源,此时的Activity还是不可见的。

onStart()

    系统在通过onCreate方法构建完Activity后,通过回调onStart()方法,此时的Activity对用户是可见的,但是页面还是没获取到焦点,因此还不可以进行交互。

onResume()

    当系统回调该方法时,说明页面已经完全加载完毕并获取到焦点,进入可交互的状态。

onPause()

    当页面失去焦点时触发(对用户还是可见的,比如弹一个dialog),当页面重新获取到焦点时会触发onResume方法。

onStop()

    当页面对用户不可见时会触发该回调,可以在该回调中停用一些视图变化的操作,比如停用动画播放。

onRestart()

    当页面从stop状态重新来到前台的时候会执行。

onDestroy()

    当页面被销毁前触发。

Activity启动模式

     Activity共有四种启动模式 ,下面我们一一做下介绍。

standard(默认模式)

     系统在启动该Activity的任务栈顶部创建Activity的新实例,可以重复叠加。

singleTop

     系统在启动该Activity的任务栈顶部如果没有该Activity的实例,则会新建一个并添加,如果

顶部存在该实例了,则会调用onNewIntent方法,而不会重新创建新的实例。

singleTask(适合作为程序入口 )

     系统在启动该Activity的任务栈中,如果不存在该实例,则会新建一个并添加,如果任务栈中 

已经存在该Activity,则会出栈该Activity以上的所有栈,至该Activity位于栈顶。

     当 Activity 设置了 taskAffinity 属性,那么这个 Activity 在被创建时就会运行在taskAffinity 名字相同的任务栈中,如果没有,则新建taskAffinity 指定的任务栈,并将 Activity 放入该栈中。另外,taskAffinity 属性主要和 singleTask 或者 allowTaskReparenting 属性配对使用,在其他情况下没有意义。

singleInstance

     会直接新建一个新的任务栈,并创建该实例并放入到新的任务栈中,后续启动会复用该任务栈中的实例。

Activity启动方式

     Activity的启动分为显式启动和隐式启动。

显式启动

    //当可以访问到Activity对应类时用这个比较方便    

      Intent intent = new Intent(this, xxx.class); 

       startActivity(intent);

       //当不能直接访问到对应的类时,比如跨模块,

                       就可以用这种显式写类型(包括包名)

         Intent intent = new Intent();

         intent.setClassName(this,"com.xxx.xxx.Activity"); 

         startActivity(intent);

       //通过包名和类全名跳转

        Intent intent = new Intent(); 

        ComponentName cn = new 

        ComponentName("com.xxx.xxx","com.xxx.xxx.xxxActivity"); 

        intent.setComponent(cn); 

        startActivity(intent);

    隐式启动 

    // 通过Category、Action设置

       Intent intent = new Intent(); 

       intent.addCategory(Intent.CATEGORY_DEFAULT); 

       intent.addCategory("com.xxx.xxx"); 

       intent.setAction("com.xxx.xxx"); 

       startActivity(intent);

Activity中的intent-filter

      从Activity的隐式启动可以看到,我们可以通过在manifest文件中设置Activity的action、category(其他类别),这样就可以通过设置intent的action和category启动Activity。一个Activity可以在manifest中设置多个intent-filter,只要有一个intent-filter命中,就可以启动Activity。

下面我们可以一起看看一些常见场景中Activity 的生命周期 

横竖屏切换

     当没有对页面android:configChanges进行一些设置时,屏幕旋转会对当前页面进行销毁重构,此时的生命周期调用是  

onPause -> onSaveInstanceState -> onStop-> onDestory -> onCreate -> onStart->onRestoreInstanceState-> onResume 

    当对Activity设置android:configChanges="orientation|

screenSize|keyboardHidden",则并不会对页面进行销毁重构,会回调方法onConfigurationChanged

按home键再回来

当内存够时,会调用onPause->onStop

     ->onRestart->onStart->onResume

按back键(ActivityA ActivityB)

ActivityB-onPause->ActiviyA-onRestart-onStart-onResume->ActivityB-onStop-onDestroy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值