目录
四大组件
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");