• 启动模式


    standard singleTop singleTask singleInstance
    什么时候该用哪种模式? final类无法被继承,没有子类

    *standard:系统默认启动模式
    Android是使用返回栈来管理Activity的,在standard模式下,每当启动一个新的活动,它就会在返回栈中入栈,并处于栈顶的位置。
    对于使用standard模式的活动,系统不会在乎这个活动是否已经在返回栈中存在,而是每次启动活动都会创建该活动的一个新的实例。

    *singleTop:
    在启动Activity时,如果发现该返回栈的栈顶已经是该Activity时,则认为可以直接使用它,不会在创建新的Activity实例
    singleTop适合接收通知启动的内容显示页面。

    *singleTask:
    每次启动该Activity时,首先会在返回栈中检查是否存在该Activity的实例,如果发现已经存在就直接使用该实例,
    并把这个Activity之上的所有活动统统出栈,如果没有发现就会创建一个新的Activity实例。
    singleTask适合作为程序入口点。例如浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,
    其余情况都会走onNewIntent,并且会清空主界面上面的其他页面。之前打开过的页面,打开之前的页面就ok,不再新建。
    (如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。)
    onNewIntent:Activity第一启动的时候执行onCreate()---->onStart()---->onResume()等后续生命周期函数,
    第一次启动Activity并不会执行到onNewIntent(). 而后面如果再有想启动Activity的时候,
    那就是执行onNewIntent()---->onResart()------>onStart()----->onResume().
    如果android系统由于内存不足把已存在Activity释放掉了,那么再次调用的时候会重新启动Activity即执行onCreate()---->onStart()---->onResume()等。
    当调用到onNewIntent(intent)的时候,需要在onNewIntent() 中使用setIntent(intent)赋值给Activity的Intent.否则,后续的getIntent()都是得到老的Intent。

    launchMode为singleTask的时候,通过Intent启到一个Activity,如果系统已经存在一个实例,系统就会将请求发送到这个实例上,
    但这个时候,系统就不会再调用通常情况下我们处理请求数据的onCreate方法,而是调用onNewIntent方法
    系统可能会随时杀掉后台运行的Activity,如果这一切发生,那么系统就会调用onCreate方法,而不调用onNewIntent方法,
    一个好的解决方法就是在onCreate和onNewIntent方法中调用同一个处理数据的方法

    *singleInstance:
    指定为singleInstance模式的Activity会启用一个新的返回栈来管理这个Activity,
    不管是哪个应用程序来访问这个Activity,都共用同一个返回栈,解决了共享Activity实例的问题
    singleInstance适合需要与程序分离开的页面。

    线程池: executorService
    ThreadPoolExecutor
    可缓存线程池CachedThreadPool
    定长线程池FixedThreadPool
    SingleThreadPool mFixedThreadPool = Executors.newSingleThreadPool();
    ScheduledThreadPool

  • 相关阅读:
    猿辅导-去除数组中数量大于k的数
    OSI体系结构各层协议
    京东-学生合唱队分组
    146-LRUCache
    76-最长上升子序列
    无序数组中三个数字乘积最大值
    38-字符串的排列
    35-复杂链表的复制
    208-Implement Trie(Prefix Tree)
    69-求一个整数的平方根
  • 原文地址:https://www.cnblogs.com/tozhjj/p/7205919.html
Copyright © 2020-2023  润新知