zoukankan      html  css  js  c++  java
  • Activity的生命周期和启动模式

    1、假设当前Activity为A,如果这时打开一个新的ActivityB,那么A的onPause()先执行,B的onResume()后执行

    2、onStart和onStop是从Activity是否可见这个角度来回调的,而onResume和onPause是从Activity是否位于前台这个角度来回调的,除了这种区别,在实际使用中没有其他明显区别。

    3、系统只在Activity异常终止的时候才会调用onSaveInstanceState和onRestoreInstanceState来存储和恢复数据,其他情况不会触发这个过程。

    4、如果一个进程中没有四大组件在执行,那么这个进程将很快被系统杀死。

    5、在屏幕旋转的时候不想让Activity重新创建就可以给android:configChange="orientation"这个值。

    6、Context,该类为Long型,类似于Win32中的handle句柄,很多方法需要通过Context才能识别调用者的实例。

    7、实现Context的类主要有Activity、Service,Application ,主要功能是加载和访问资源

    8、在Android中有两种Context,一种是Application context,一种是activity context,通常在类和方法间传递的是activity context。

    9、

    10、四种启动模式:

    a、standard:标准模式;当用ApplicationContext启动standard模式的Activity时会报android 运行时错误,解决这个问题的方法是为待启动的Activity指定FLAG_ACTIVITY_NEW_TASK标记位,这时会新建一个新的任务栈,这个时候待启动的Activity实际上是以singleTask模式启动的。

    b、singleTop:栈顶复用模式;如果新Activity已经位于栈顶,那么此Activity不会被重新创建,同时它的onNewIntent方法会被回调。

    c、singleTask:栈内复用模式;这是一种单实例模式,和singleTop一样,系统也会回调onNewIntent。系统首先会寻找是否存在新启动的Activity的任务栈,如果不存在,就重新创建一个任务栈,然后创建新启动的Activity放入栈中;如果存在需要的任务栈,检查是否待启动的Activity在栈中,如果有,就将其调到栈顶并调用它的onNewIntent方法,如果不存在,就创建待启动的Activity实例压人栈中。SingleTask具有clearTop的效果。

    d、singleInstance:单实例模式;这是一种加强的singleTask模式,它除了具有singleTask的所有特性外,还加强了一点,只能单独地位于一个任务栈中。

    11、参数TaskAffinity:任务相关性。这个参数表示了一个Activity所需要的任务栈的名字。默认情况下,所有Activity所需的任务栈的名字为应用的包名。TaskAffinity属性主要和singleTask启动模式或者allowTaskReparenting属性配对使用。

    当TaskAffinity和singleTask启动模式配对使用的时候,它是具有该模式的Activity的目前任务栈的名字,待启动的Activity会运行在名字和TaskAffinity相同的任务栈中。

    12、如何给Activity指定启动模式呢?有两种方法:

    a、通过AndroidManifest为Activity指定启动模式:android:launchMode;这种无法直接为Activity设定FLAG_ACTIVITY_CLEAR_TOP标识

    b、通过在Intent中设置标志位为Activity指定启动模式。无法为Activity指定singleInstance模式

    13、SingleTask:当从栈中启动一个已经存在的Activity时,系统不会再执行onCreate方法,而是执行onNewIntent方法。比如SingleTask模式的Activity,连续点击3次后,Activity没有被重新创建,只是连续三次执行:暂停onPause,然后调用onNewIntent,接着调用onResume方法

    14、标志位:

    FLAG_ACTIVITY_NEW_TASK,作用同“singleTask”启动模式;

    FLAG_ACTIVITY_SINGLE_TOP,作用同“singleTop”启动模式;

    FLAG_ACTIVITY_CLEAR_TOP,具有此标记位的Activity,当它启动时,在同一个任务栈中所有位于它上面的Activity都要出栈。singleTask启动模式默认就具有此标记位的效果;

    FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS:具有这个标记的Activity不会出现在历史Activity的列表中

    15、Intent显示启动需要明确指定被启动对象的组件信息,包括包名和类名,隐式启动则不需要明确指定组件信息。

    16、隐式启动需要Intent能够匹配目标组件的IntentFilter中所设置的过滤信息。IntentFilter中的过滤信息有action、category、data。只有一个Intent同时匹配action类别、category类别、data类别才算完全匹配,只有完全匹配才能成功启动目标Activity。

    17、一个Activity中可以有多个intent-filter,一个Intent只要能匹配任何一组intent-filter即可成功启动对应的Activity。

    18、action是一个字符串,一个过滤规则中可以有多个action,那么只要Intent中的action能够和过滤规则中的任何一个action相同即可匹配成功。

    19、action的匹配要求Intent中的action存在且必须和过滤规则中的其中一个action相同,action区分大小写

    20、category要求Intent中如果含有category,那么所有的category都必须和过滤规则中的其中一个category相同。

    21、如果不设置category,系统会默认为Intent加上“android.intent.category.DEFAULT”这个category。

    22、data由两部分组成,mimeType和URI。mimeType指媒体类型,比如image/jpeg、video/*等,可以表示图片、文本、视屏等不同的媒体格式,而URI的结构是:<scheme>://<host>:<port>/[<path>|<pathPrefix>|<pathPattern>]。

    23、data的匹配的规则和action类似,如果IntentFilter中有data,它也要求Intent中必须含有data数据,并且data数据能够完全匹配过滤规则中的某一个data。

    24、URI的默认值是content和file

    25、如果要为Intent指定完整的data,必须要调用setDataAndType方法,不能先调用setData再调用setType,因为这两个方法会彼此清除对方的值。

    26、在action和category中,有一类action和category比较重要:

    <action android:name="android.intent.action.MAIN" />

    <category android:name="android.intent.category.LAUNCHER" />

    这两者的共同作用是用来表明这是一个入口Activity并且会出现在系统的应用列表中,缺一不可。

  • 相关阅读:
    2021年Web开发的7大趋势
    webpack4.0各个击破(9)—— karma篇
    Webpack4.0各个击破(8)tapable篇
    你应该了解的25个JS技巧
    Webpack4.0各个击破(7)plugin篇
    Webpack4.0各个击破(5)module篇
    webpack4.0各个击破(4)—— Javascript & splitChunk
    webpack4.0各个击破(3)—— Assets篇
    10 张图聊聊线程的生命周期和常用 APIs
    新手一看就懂的线程池!
  • 原文地址:https://www.cnblogs.com/fankongkong/p/7207615.html
Copyright © 2011-2022 走看看