【Android】Activity
来源:互联网 发布:windows蓝牙找不到了 编辑:程序博客网 时间:2024/06/03 15:49
Activity简介
Activity通常展现为一个可视化的用户界面,是Android程序与用户交互的窗口,一个Activity占据当前的窗口,响应所有窗口事件,具备有控件,菜单等界面元素。从内部逻辑来看,Activity需要为了保持各个界面状态,需要做很多持久化的事情,还需要妥善管理生命周期,和一些转跳逻辑。
注意:
1. 首先一个应用程序可以有一个或者多个Activity的活动页面。
2. 每一个应用程序都需要有一个activity入口,也就相当于程序的入口。唯一不同的他的入口地址需要在androidmianfest.xml中配置
3. 启动一个activity的时候要跳转到另一个activity中就需要Intent的组件。
Activity的生命周期
Activity的状态
- active/running:Activity处于前台并且在Activity栈的栈顶
- paused:Activity失去焦点但仍然可见,例如当一个非全屏的透明Activity在当前Activity的上方时,会进入paused状态,在内存极度匮乏的时候,处于paused状态的Activity可能被系统杀死
- stoped:当Activity被另一个Activity完全覆盖的时候,会处于stoped状态,当系统需要更多内存时可能会杀死处于该状态的Activity
- killed:当处于paused或者stoped状态的Activity被系统从内存中删除后,会处于killed状态
Activity的创建
新建一个类,继承Activity,重写onCreate方法
public class MainActivity extends Activity {//继承Activity 活动(界面)@Overrideprotected void onCreate(Bundle savedInstanceState) {//程序的入口 super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);//设置内容视图}}
- 新建一个layout的xml文件
- 在AndroidManifest中注册Activity
Activity的切换
显式切换
通过Intent来实现启动一个明确的Activity
Intent intent = new Intent(ThisActivity.this, OtherActivity.class);startActivity(intent);
隐式切换
首先需要在AndroidManifest中设置Activity的intent-filter信息,其中的action name原则上可以随意随意设置,最好使用包名.类名的结构,防止冲突。
<activity android:name="com.example.SecondActvity" android:label="@string/app_name" > <intent-filter> <action android:name="1234567890" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter></activity>
然后在Intent中设置action信息,从而启动对应的Activity
Intent intent = new Intent();intent.setAction("1234567890");startActivity(intent);
Activity的启动模式
任务栈
任务栈Task,是一种用来放置Activity实例的容器,他是以栈的形式进行盛放,也就是所谓的先进后出,主要有2个基本操作:压栈和出栈,其所存放的Activity是不支持重新排序的,只能根据压栈和出栈操作更改Activity的顺序。
Standard模式
标准模式。可以有多个相同的实例,也允许多个相同Activity叠加。应用场景:绝大多数Activity。
singleTop模式
栈顶复用模式,如果要开启的activity在任务栈的顶部已经存在,就不会创建新的实例,而是调用 onNewIntent()方法。避免栈顶的activity被重复的创建。应用场景:在通知栏点击收到的通知,然后需要启动一个Activity,这个Activity就可以用singleTop,否则每次点击都会新建一个Activity。
singleTask模式
栈内复用模式, activity只会在任务栈里面存在一个实例。如果要激活的activity,在任务栈里面已经存在,就不会创建新的activity,而是复用这个已经存在的activity,调用 onNewIntent()方法,并且清空这个activity任务栈上面所有的activity。应用场景:大多数App的主页。对于大部分应用,当我们在主界面点击回退按钮的时候都是退出应用,那么当我们第一次进入主界面之后,主界面位于栈底,以后不管我们打开了多少个Activity,只要我们再次回到主界面,都应该使用将主界面Activity上所有的Activity移除的方式来让主界面Activity处于栈顶,而不是往栈顶新加一个主界面Activity的实例,通过这种方式能够保证退出应用时所有的Activity都能报销毁。
singleInstance模式
单一实例模式,整个手机操作系统里面只有一个实例存在。不同的应用去打开这个activity 共享公用的同一个activity。他会运行在自己单独,独立的任务栈里面,并且任务栈里面只有他一个实例存在。应用场景:呼叫来电界面。这种模式的使用情况比较罕见,在Launcher中可能使用。或者你确定你需要使Activity只有一个实例。建议谨慎使用。
设置启动模式
设置AndroidManifest
可以设置standard,singleTop,singleTask,singleInstance
<activity android:name="com.example.singletask.SecondAct" android:launchMode="singleTask" android:label="@string/app_name" ></activity>
设置Intent的Flag
FLAG_ACTIVITY_NEW_TASK
使用一个新的Task来启动一个Activity,但启动的每个Activity都讲在一个新的Task中。该Flag通常使用在从Service中启动Activity的场景,由于Service中并不存在Activity栈,所以使用该Flag来创建一个新的Activity栈,并创建新的Activity实例。
FLAG_ACTIVITY_SINGLE_TOP
使用singletop模式启动一个Activity,与指定android:launchMode=“singleTop”效果相同。
FLAG_ACTIVITY_CLEAR_TOP
使用SingleTask模式来启动一个Activity,与指定android:launchMode=“singleTask”效果相同。
FLAG_ACTIVITY_NO_HISTORY
Activity使用这种模式启动Activity,当该Activity启动其他Activity后,该Activity就消失了,不会保留在Activity栈中。
- Android Activity---启动Activity
- Android Activity---关闭Activity
- Android Activity---协调Activity
- Android Activity---启动Activity
- Android Activity---关闭Activity
- Android Activity---协调Activity
- Android Activity
- android activity
- Android Activity
- Android Activity
- android activity
- Android Activity
- android activity
- android activity
- android activity
- Android Activity
- android activity
- android activity
- Elasticsearch用法
- js数据类型
- SQLAlchemy_定义(一对一/一对多/多对多)关系
- android插件化开发--修改携程插件开发支持provider
- Mybatis介绍
- 【Android】Activity
- BZOJ2749: [HAOI2012]外星人
- python爬虫1
- part-23 输出短路电流
- http://www.linuxeden.com/html/develop/20100303/70924.html
- html使用公共元素
- 运维学习第九天
- 长时间工作意味着什么?
- html标签label元素