Android基础之四大组件(Activity | Service | Broadcast Receiver | Content Provider)详解 | 含代码地址

目录

四大组件

Activity(活动)

Service(服务)

Broadcast Receiver(广播接收者)

Content Provider(内容提供者)

四大组件

Activity(活动)

简介

  • Activity相当于一个页面,可以在Activity中添加各种控件,例如Button,TextView等。
  • 一个Android程序(APP)可以由多个Activity组成
  • 提供了与用户交互的可视化界面(GUI)
  • Android中使用栈task来存储Acticity,及先进后出,栈顶及我们所看到的页面

生命周期

  • onCreat()--->onStart()--->onResume()--->onPause()--->onStop()--->onDestory()
  • onStop()--->onRestart()--->onStart()
  • 图解

启动模式(4种)

  • Standard(默认启动模式)

在该模式下,Activity可以有多个实例,每次启动一个Activity,无论栈Task里面是否已经存在该Activity的实例,都将创建一个新实例入栈

例如,Acticity A调用B,然后B调用A,这时栈的情况是ABA

  • SingleTop(栈顶复用模式)

当一个SingleTop实例位于栈顶时,再去启动它时,不需要创建新的实例,只需要调用newInstance()方法,但若不在栈顶,则会被重新创建

例如,A调用B,B调用B自己,情况是AB,若A调用B,B调用A,A再调用B,情况是BABA,同Standard

  • SingleTask(单任务模式)

如果启动的Acticity存在于栈Task中,则该Activity的实例会被移到栈顶(相当于将该Acticity之上的实例全部移出栈)

例如,原来Stack里面有ABCD,调用B,那就变成AB

  • SingleInstance(单实例模式)

一个Activity就是一个栈

启动方式

  • 为Activity指定所需任务栈的方式

在AndroidManifest.xml下,添加taskAffinity属性(默认情况下不指定该属性值,则该activity的指定栈为应用的包名)

<activity android:name=".SecondActivity"
    android:launchMode="singleTask"
    android:taskAffinity="com.example.laughter.task_1"/>
  • 为Activity指定启动模式

在AndroidManifest文件中指定lanchMode属性值

Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

通过Intent中设置标志位来指定启动模式

<activity android:name=".SecondActivity"
        android:launchMode="singleTask"
        android:taskAffinity="com.example.laughter.task_1"/>

常见Flags标志位

· FLAG_ACTIVITY_NEW_TASK	指定singleTask模式
· FLAG_ACTIVITY_SINGLE_TOP	指定singleTop模式
· FLAG_ACTIVITY_CLEAR_TOP	同一栈中的所有位于该activity上方的都出栈

跳转方式

  • 显示启动

Intent内部直接声明要启动的activity所对应的class

Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intnet);
  • 隐式启动

分为两步走 第一步,在文件里配置activity属性

<activity android:name="com.example.android.tst.secondActivity"
            android:label = @string/title>
	    <intent-filter>
		    <action android:name="com.example.android.tst.secondActivity/>
		    <category android:name="android.intent.category.DEFAULT"/>
	    <intent-filter/>
</activity>
第二步,在需要跳转的地方	
Intent intent = new Intent("com.example.android.tst.secondActivity");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值