Activity 生命周期、启动模式、IntentFilter 匹配规则

一、Activity生命周期

onCreate()

表示Activity开始创建。一般在里面做一些数据初始化的操作;

onStart()

表示Activity正在启动,即将进入前台。这个时候Activity已经创建出来了,但是还没有进入前台,无法与用户交互;

onRestart()

表示Activity正在重新启动。从不可见状态(onStop状态)重新回到可见状态时,会调用回调这个方法;

onResume()

表示Activity已经进入前台,能够与用户进行交互;

onPause()

表示Activity即将停止。从完全可见状态变为部分可见状态时会回调这个方法;

onStop()

表示Activity正在停止。从部分可见状态变为不可见状态(从前台到后台)时,会回调这个方法;

onDestroy()

表示Activity正在销毁。这是Activity生命周期的最后一个方法,一般在这个方法里做一些资源回收的工作;


二、Activity启动模式

standard

默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。

singleTop

可以有多个实例,但是不允许多个相同Activity叠加。即,如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。

singleTask

只有一个实例。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。

singleInstance

只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。


三、IntentFilter的匹配规则

//Intent显示调用

Intent intent = new Intent();

intent.setClass(SecondActivity.this,ThirdActivity.class);

startActivity(intent);


//隐式调用

Intent过滤信息中有action, category, data


匹配规则

a、只有一个Intent同时匹配action类别, category类别, data类别才算完全匹配.只有完全匹配才能启动目标Activity.

b、一个Activity可以配置多组IntentFilter.一个Intent只要能匹配其中一组IntentFilter,即可成功启动对应的Activity.


//action的匹配规则:

<activity android:name=".FirstActionActivity">

    <intent-filter>

        <action android:name="com.huyc.action1"></action>

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

    </intent-filter>


    <intent-filter>

        <action android:name="com.huyc.action2"></action>

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

    </intent-filter>

</activity>


//调用

Intent intent = new Intent();

intent.setAction("com.huyc.action1");

//        intent.setAction("com.huyc.action2"); 或者这样

startActivity(intent)


//category的匹配规则:

<activity android:name=".FirstActionActivity">

    <intent-filter>

        <action android:name="com.huyc.action1"></action>

        <category android:name="com.huyc.category1"></category>

        <category android:name="com.huyc.category2"></category>

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

    </intent-filter>


    <intent-filter>

        <action android:name="com.huyc.action2"></action>

        <category android:name="com.huyc.category3"></category>

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

    </intent-filter>

</activity>


//调用

//匹配第一组过滤规则:

Intent intent = new Intent();

intent.setAction("com.huyc.action1");

intent.addCategory("com.huyc.category1");

intent.addCategory("com.huyc.category2");

startActivity(intent);

//或者

Intent intent = new Intent();

intent.setAction("com.huyc.action1");

intent.addCategory("com.huyc.category1");

//intent.addCategory("com.huyc.category2");

startActivity(intent);

//或者

Intent intent = new Intent();

intent.setAction("com.huyc.action1");

//intent.addCategory("com.huyc.category1");

intent.addCategory("com.huyc.category2");

startActivity(intent);


//匹配第二组过滤规则:

Intent intent = new Intent();

intent.setAction("com.huyc.action2");

intent.addCategory("com.huyc.category3");

startActivity(intent);


//不匹配category 因为系统在调用startActivity()startActivityForResult时会默认为intent加上"android.intent.category.DEFAULT"这个category

Intent intent = new Intent();

intent.setAction("com.huyc.action2");

startActivity(intent);


//data的匹配规则:<scheme>: //<host>:<port>/[<path>|<pathPrefix>|<pathPattern>]

<data android:scheme="string"

        android:host="string"

        android:port="string"

        android:path="string"

        android:pathPrefix="string"

        android:pathPattern="string"

android:mimeType="string"></data>


//intent-filter 过滤规则虽然没有明确指定URI,但却有默认值,默认值为contentfile

<intent-filter>

    <action android:name="com.huyc.action2"></action>

    <action android:name="com.huyc.action3"></action>

    <category android:name="com.huyc.category3"></category>

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


    <data android:mimeType="text/plain"></data>

</intent-filter>


//调用

Intent intent = new Intent();

intent.setAction("com.huyc.action2");

intent.addCategory("com.huyc.category3");

intent.setDataAndType(Uri.parse("file://string"), "text/plain");

startActivity(intent);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值