Activity基础

Activity基础

Activity是四大组件中出现频率最高的组件,是与用户交互的直接界面,系统采用栈的方式管理Activity。


Activity和View的关系

Activity是和用户交互的组建,也是最直观展示视图的,activity和view是什么关系呢?
每个activity都会包含一个PhoneWindow对象,phonewindow将DecorView设置为整个窗口的根view(这个工作是通过ViewRootImpl实现的),DecorView分为TitleView和ContentView(熟悉吧,setContentView()在activity中常见吧。。。),

Activity生命周期

先上经典图:
这里写图片描述

生命周期表示了activity从创建到消亡的过程。

onCreate():生命周期的第一个方法,表示activity正在创建。常用来做初始化。
onStart():activity已经被创建,正在被启动,这个过程无法和用户交互。
onResume():activity出现在前台,即active状态,此时的activity处于栈顶,能与用户交互。
onPause():当activity失去焦点,可见但不可与用户交互,比如被一个非全屏的dialog覆盖,所有的状态信息都仍然保存着。
onStop():activity的停止状态,依然持有状态信息等,可以适当做些回收工作。
onRestart():activity重新启动,从不可见变为可见。
onDestroy():生命周期的最后一个方法,表示activity被销毁,可以释放资源。

Activity启动模式

1.
Activity是由栈管理的,先启动的Activity放在栈底,后启动的防灾栈顶,返回时从栈顶到栈底依次返回。当重复多次启动同一个activity时,在这个栈中会重复创建实例还是一直使用同一个实例?这就用到了activity的启动模式。
activity的启动模式分为四种:standard,singleTop,singleTask,singleInstance。

standard:标准模式,系统默认使用此模式,在该模式下,每启动一个activity,都会创建一个实例,即使栈中已经有了这个activity的实例。

singleTop: 使用栈顶实例。如果新启动的activity实例已经在栈顶,那么就会直接使用这个实例,不会重新创建。如果新activity的实例不存在栈中,或者不位于栈顶,那么重新创建。同时调用onNewIntent方法。

singleTask:栈内复用实例。只要在activity栈中存在一个activity的实例,那么启动时,都不会重新创建。如果不在栈顶,那么会把本实例上面的实例都干掉,把此activity的实例调到栈顶。并调用onNewIntent方法。如果不存在,那么重新创建实例放入栈顶。

singleInstance:此模式下的activity在启动后都会放入一个新的栈中。

2.
给activity设置启动模式的两种方式:
(1)在AndroidMenifest.xml中为对应的activity指定launchMode属性。
例如:

<activity
    android:name=".mainActivity"
    android:launchMode="singleTask"
    />

(2)通过设置intent的flag。
例如:

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

Activity保存状态

当activity被系统销毁时,其生命周期方法会被调用,同时会调用onSaveInstanceState方法保存当前Activity的状态数据。当activity重建后会调用onRestoreInstanceState方法恢复数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值