zoukankan      html  css  js  c++  java
  • Android的启动模式

    首先分析一下Activity生命周期

    A跳B (A finish) 生命周期顺序

    onPause(A)— onCreate(B)— onStart(B)— onResume(B)— onStop(A)— onDestroy(A)

    A跳B再返回A (B finish ) 生命周期顺序

    onPause(A)— onCreate(B)— onStart(B)— onResume(B)— onStop(A)— onPause(B)— onRestart (A)— onStart(A)— onResume(A)— onStop(B)— onDestroy(B)

    注意:
    onPause可以做一些存储数据、停止动画等,但是注意不能太耗时。从生命周期可以看出,必须A的onPause方法执行完,新的activity才可以执行。

    onStop可以做稍微重量级的回收工作,但是同样不能太耗时。

    onDestroy可以做一些回收工作和最终的资源释放。(针对应用中单例数据库并不适合在此销毁)。

    Activity的启动模式

    standard标准模式(系统的默认模式)

    特性:每次启动一个activity,都会创建一个新的实例,无论该实例是否存在于现在的栈中。
    应用场景:一般界面都是这个模式

    非activity类型的Context(如ApplicationContext)不能直接去启动一个activity,因为其没有所谓的任务栈。但是如果使用非activity类型的Context去启动一个activity,并且给待启动的activity指定了FLAG_ACTIVITY_NEW_TASK标记位,那么是没有问题的(该方式相当于待启动的activity是以singleTask模式启动的)。

    singleTop栈顶复用模式

    特性:等同于intent.addFlags(Intent.FLAG_ ACTIVIT_ SINGLE_TOP)。
    应用场景:通知栏点击后需要启动一个活动页(该页面也许已经存在栈内)

    如果A已经位于栈顶的话,再次启动A , A不会再次重建,会复用栈顶存在的A ,并调用A中的onNewIntent方法。
    如果A没有在栈顶,再次启动A , A会被重建。

    singleTask栈内复用模式

    特性:等同于intent.addFlags(Intent.FLAG_ ACTIVIT_ NEW_TASK)
    应用场景:APP首页

    单实例模式,一个栈内,无论启动多少次,只存在一个实例。
    每次重新启动已经存在的activity,都会调用activity的onNewIntent方法。并且清空该activity任务栈上面所有的activity。

    singleInstance单实例模式

    特性:具有singleTask模式的所有特性。
    应用场景:呼叫来电界面

    该模式下的activity,系统会为其创建一个新的任务栈。并且栈中只有该activity一个实例。确切的说:即它会独自占用一个任务,被他开启的任何活动都会运行在其他任务中。
    该模式启动的活动具有全局唯一性,即整个系统中只会存在一个这样的实例。

    两种非常用启动模式

    需求一:A-B-C-D依次开启,然后 D跳转B希望C D都finish掉。

    方案1:B的启动模式设为singleTask.

    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    

    方案2:D 跳转 B 的时候,添加如下标记

    intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    

    (说明:2的作用:如果B的启动模式是默认的,那么B C D都会finish,B会重建,为了防止B重建)

    需求二:A-B-C-D依次开启,从D启动C,但是不是变成A B C D C而是A B D C。

    操作:D 跳转 B 的时候,添加如下标记

    intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)
    
  • 相关阅读:
    Windows Azure Storage (17) Azure Storage读取访问地域冗余(Read Access – Geo Redundant Storage, RA-GRS)
    SQL Azure (15) SQL Azure 新的规格
    Azure China (5) 管理Azure China Powershell
    Azure China (4) 管理Azure China Storage Account
    Azure China (3) 使用Visual Studio 2013证书发布Cloud Service至Azure China
    Azure China (2) Azure China管理界面初探
    Azure China (1) Azure公有云落地中国
    SQL Azure (14) 将云端SQL Azure中的数据库备份到本地SQL Server
    [New Portal]Windows Azure Virtual Machine (23) 使用Storage Space,提高Virtual Machine磁盘的IOPS
    Android数据库升级、降级、创建(onCreate() onUpgrade() onDowngrade())的注意点
  • 原文地址:https://www.cnblogs.com/io1024/p/11532764.html
Copyright © 2011-2022 走看看