美文网首页AndroidAndroid知识Android开发
没错,就是那个说了N遍的Activity

没错,就是那个说了N遍的Activity

作者: 卡路fly | 来源:发表于2016-12-01 15:32 被阅读197次

    Activity生命周期

    • onCreate()

    继承Activity类时默认生成,在activity第一次被创建时候被调用,完成activity初始化。

    • onStart()

    当然在onCreate()之后被调用,这个时候你还看不到activity,在activity即将被你看见的时候,它被调用。

    • onResume()

    activity正在运行,即处于active/running的状态。
    ps: onActivityResult ():You will receive this call immediately before onResume() when your activity is re-starting.

    • onPause()

    系统准备去撩别的activity的时候,当前activity马上要走了的时候被调用。在这个时候,赶紧把一些消耗CPU的资源放掉,养精蓄锐,等activity回来哟。[害羞脸]

    • onStop()

    当你已经完全看不到activity的时被调用。
    请注意:是完全看不到了,如果看到一根头发丝都不会被执行,比如:弹出了一个对话框的activity。

    • onDestory()

    在销毁前被调用。[忧伤.jpg]

    • onRestart()

    在onStop之后,从停止状态变成运行,那么经过onRestart又回到onStart。

    <br />

    <br />


    Activity被回收了之后

    <br />

    PS:
    如何在屏幕旋转的时候不重新创建activity?
    设置android:configChanges="orientation"

    • onSaveInstanceState()

    会将activity状态通过这个方法保存至Bundle对象,当然你也可以额外增加键值存入Bundle来保存这些状态。
    但是,一切的前提:activity不是被用户finish的!

    <br />

    • onRestoreInstanceState()

    这个方法可以理解为恢复上面大哥临时保存的状态。
    产生的Bundle对象传递到该方法以及onCreate()方法中。
    发现了吗?这就是onCreate()里面的参数。

    • standard -- 标准启动模式
      默认模式,可以理解为叠罗汉,每次都会创建新的实例,覆盖在原来的额上面。
    • ** singleTop **
      判断栈顶最上层是不是我们需要启动的activity。如果是,则不需要创建新的实例。
    手残星人
    • ** singleTask **
      检查整个栈中是否有需要启动的activity,如果存在则将该activity以上的所有acitivity都销毁。
    主要看文字,啊哈哈,手残星人
    • ** singleInstance**
      这个声明的activity会出现在一个新的栈中,这个栈只有这一个activity。两个应用之间可以共享这一个activity。

    <br />
    <br />

    <h4> Intent Flag启动 </h4>
    (** 该方法优先级高于AndroidMainifest启动 **)

    <br />

    • FLAG_ACTIVITY_NEW_TASK
      使用一个新的Task来启动一个Activity。
      通常使用在从Service中启动Activity场景,由于Service中不存在Activity栈,使用改Flag创建一个新的Activity栈,并创建新的Activity实例。
      <br />
    • FLAG_ACTIVITY_SINGLE_TOP
      相当于android:launchMode="singleTop"
      <br />
    • FLAG_ACTIVITY_CLEAR_TOP
      相当于android:launchMode="singleTask"
      <br />
    • ** FLAG_ACTIVITY_NO_HISTORY**
      使用这种模式启动activity,当当前activity启动其他activity之后,该activity消失,不保留在Activity栈中。
      <br />


      FLAG_ACTIVITY_NO_HISTORY

    <br />

    IntentFilter匹配规则

    <br />

    IntentFilter过滤信息有:action、category、data。
    一个过滤列表中可以有多个。
    只有同时匹配这三项才能成功启动目标Activity。
    一个Activity中可以有多个过滤列表,只要匹配任何一组即可成功启动目标Activity。

    <br />

    • action匹配规则
      当一个过滤规则中有多个action时,只要Intent中的action能和过滤规则中任意一个action相同,即匹配成功。

    <br />

    • category匹配规则
      1.category是一个字符串,系统有预定义一些,我们也可以定义自己的category。

    2.当存在多个的时候,必须使每一个Intent中的category和过滤规则中的category完全相同,才能匹配成功。

    3.当不存在时,系统在调用startActivity或startActivityForResult的时候默认为Intent加上“android.intent.category.DEFAULT”。

    4 .为了使activity可以接收隐式调用,必须在intent-filter中指定“android.intent.category.DEFAULT”。

    <br />

    • data匹配规则
      与action类似,但结构较为复杂。
    <!-- data语法  -->
    <intent-filter>
        <data
            android:host="string"
            android:mimeType="string"
            android:path="string"
            android:pathPattern="string"
            android:pathPrefix="string"
            android:port="string"
            android:scheme="string" />
          ……
    </intent-filter>
    
    
    <!-- 也可以写成 -->
    <intent-filter>
        <data   android:host="string" />
        <data   android:mimeType="string" />
         ……
    </intent-filter>
    

    data由两部分组成,mime和URI,见下图


    eg:
    intent.setDataAndType(Uri.parse("http://123"),"image/jpeg");



    相关文章

      网友评论

      本文标题:没错,就是那个说了N遍的Activity

      本文链接:https://www.haomeiwen.com/subject/gsfxmttx.html