• Android -- Activity的生命周期,Activity四种启动模式 Standard, SingleTop,SingleTask,SingleInstance


    1. 示例图

    这七个方法定义了Activity的完整生命周期。实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环:

     Activity完整生命周期自第一次调用onCreate()开始,直至调用onDestroy()为止。ActivityonCreate()中设置所有“全局”状态以完成初始化,而在onDestroy()中释放所有系统资源。例如,如果Activity有一个线程在后台运行从网络下载数据,它会在+onCreate()创建线程,而在onDestroy()销毁线程。
     Activity可视生命周期onStart()调用开始直到相应的onStop()调用结束。在此期间,用户可以在屏幕上看到Activity,尽管它也许并不是位于前台或者也不与用户进行交互。在这两个方法之间,我们可以保留用来向用户显示这个Activity所需的资源。例如,当用户不再看见我们显示的内容时,我们可以在onStart()中注册一个BroadcastReceiver来监控会影响UI的变化,而在onStop()中来注消。onStart()onStop()方法可以随着应用程序是否为用户可见而被多次调用。
     Activity前台生命周期onResume()调用起,至相应的onPause()调用为止。在此期间,Activity位于前台最上面并与用户进行交互。Activity会经常在暂停和恢复之间进行状态转换——例如当设备转入休眠状态或者有新的Activity启动时,将调用onPause()方法。当Activity获得结果或者接收到新的Intent时会调用onResume()方法。关于前台生命周期循环的例子请见PPT下方备注栏。
     

    2. 四种启动模式

    http://www.2cto.com/kf/201309/246498.html

    一:Standard的启动模式

     Standard是默认的模式每开始一个activity,就会在栈中加一个activity,相同的也会加,所以加多少个,就要按多少次返回键才能回到最初的界面

    二:singleTop的启动模式

    1.清单配置:

           <activity 

                android:name="com.itcode.taskstack.SecondActivity" 

                android:label="@string/_second" 

                android:launchMode="singleTop"> 

    </activity> 

        Singletop:如果任务栈的栈顶已经存在这个activity的实例, 不会创建新的activity,而是利用旧的activity实例 调用 旧的activity的onNewIntent()方法

    2.作用:

    避免一个糟糕的用户体验,如果这个界面已经被打开且在任务栈的栈顶,就不会重复开启了

    三:Singletask的启动模式:

    1.Androidfest配置:

            <activity  

                android:name="com.itcode.taskstack.SecondActivity"

                android:label="@string/_second"

                android:launchMode="singleTask">

         </activity>

    2.作用:

    singletask的启动模式:在任务栈里面只允许一个实例存在,假如02是singletask,栈里是:01 02 01 03 若此时开启02,则会复用这个已经存在的activity,并且把当前activity上面其他的activity从任务栈里清空!

    3.应用场景:

    浏览器:底层使用的是webkit c 内核,初始化一次需要申请很多的内存资源,占用cpu时间所以使用singletask,保证在任务栈里只会有一个实例存在

    四:singleInstance的启动模式(相当于单例):

     1.Androidfest的配置:

     <activity 

                android:name="com.itcode.taskstack.SecondActivity" 

                android:label="@string/_second" 

                android:launchMode="singleInstance"> 

            </activity> 

    2.特点:

    singleInstance的启动模式更加极端, 开启新的activity,会给自己创建一个单独的任务栈 

     3.应用场景:

    在整个手机操作系统里面只会有一个该activity的实例存在, 所以多个应用程序共享这个activity的实例,有线程安全问题!

  • 相关阅读:
    关于研发核心团队建设的一些思考
    无法打开物理文件xxx.mdf操作系统错误 5:“5(拒绝访问。)” (Microsoft SQL Server,错误: 5120)的解决方法
    自适应网页设计(Responsive Web Design)
    css浮动与绝对定位小记
    WEB进度条控件
    GitHub上整理的一些工具
    雾里看花般的迷茫--货运APP
    揭秘史上最完美一步到位的搭建Andoriod开发环境
    我是如何在SQLServer中处理每天四亿三千万记录的
    货运APP产品魔力=卓越功能×情感诉求
  • 原文地址:https://www.cnblogs.com/xj626852095/p/3647969.html
Copyright © 2020-2023  润新知