Android_Activity

一 生命周期图
这里写图片描述

1 正常情况的生命周期
onCreate –>onStart–>onResume–>onPause–>onStop–>onDestory

2 横竖屏切换的时候
如果突然旋转屏幕,由于系统配置发生了改变,在默认情况下,Activity就会被销毁并重新创建

在Activity中添加android:configChanges="orientation|keyboardHidden|screenSize"属性可以避免Activity生命周期被回调

3 Activity上弹出Dialog,弹出时然后按Home键时的生命周期
Activity上弹出Dialog:onCreate–>onStart–>onResume
当启动和退出Dialog时,Activity的状态始终未变,,因为Dialog实际上时一个View,它是属于某一个Activity的,因此如果Dialog显示在当前Activity之前时不会影响到Activity的生命周期的
dialog弹出时按Home键:onPause–>onStop

4 前台切换到后台,然后再回到前台,Activity生命周期回调方法。

5 两个Activity 之间跳转
MainActivity 和 DragActivity

 

二.Activity状态保存

Activity提供了onSaveInstanceState()回调方法,这个方法可以保证在活动回收之前被调用,
onSaveInstanceState()方法会携带一个Bundle类型的参数,Bundle提供了一些方法用于保存数据

 

三.Activity的四种启动模式对比

standard:Activity的默认加载方法,即使某个Activity在Task栈中已经存在,另一个activity通过Intent跳转到该activity,同样会新创建一个实例压入栈中。例如:现在栈的情况为:A B C D,在D这个Activity中通过Intent跳转到D,那么现在的栈情况为: A B C D D 。此时如果栈顶的D通过Intent跳转到B,则栈情况为:A B C D D B。此时如果依次按返回键,D  D C B A将会依次弹出栈而显示在界面上。

singleTop:如果某个Activity的Launch mode设置成singleTop,那么当该Activity位于栈顶的时候,再通过Intent跳转到本身这个Activity,则将不会创建一个新的实例压入栈中。例如:现在栈的情况为:A B C D。D的Launch mode设置成了singleTop,那么在D中启动Intent跳转到D,那么将不会新创建一个D的实例压入栈中,此时栈的情况依然为:A B C D。但是如果此时B的模式也是singleTop,D跳转到B,那么则会新建一个B的实例压入栈中,因为此时B不是位于栈顶,此时栈的情况就变成了:A B C D B。

singleTask:如果某个Activity是singleTask模式,那么Task栈中将会只有一个该Activity的实例。例如:现在栈的情况为:A B C D。B的Launch mode为singleTask,此时D通过Intent跳转到B,则栈的情况变成了:A B。而C和D被弹出销毁了,也就是说位于B之上的实例都被销毁了。singleTask模式的Activity不管是位于栈顶还是栈底,再次运行这个Activity时,都会destory掉它上面的Activity来保证整个栈中只有一个自己。

singleInstance:指定为singleInstance模式的活动会启用一个新的返回栈来管理这个活动(其实如果singleTask模式指定了不同的taskAffinity,也会启动一个新的返回栈);并且该返回栈中只放入这一个活动。其应用场景是这样的:假设程序中有一个活动是允许其它程序调用的,如果想使其它程序和这个程序共享这个活动的实例,使用其它三种启动模式是不行的,因为每个应用程序都有自己的返回栈,同一个活动在不同的返回栈中入栈时必然是创建了新的实例。而使用singleInstance模式可以解决这个问题,在这种模式下会有一个单独的返回栈来管理这个活动,不管是哪个应用程序来访问这个活动,都共用同一个返回栈,也解决了共享活动实例的问题。

四 四种状态

    Active/Runing: 它处于可见并可和用户交互的激活状态。
    Paused: 仍然可见,但它已经失去了焦点故不可与用户交互。比如当 Activity 被另一个透明或者 Dialog 样式的 Activity 覆盖时的状态。
    Stoped: 当 Activity 被另外一个 Activity 覆盖、失去焦点并不可见时处于 Stoped 状态。
    Killed: Activity被系统杀死回收或者没有被启动时处于 Killed 状态。

五 启动方式

显式和隐式

Intent intent = new Intent(mContext, AnotherActivity.class);  
startActivity(intent);  

隐式跳转
<activity android:name=".AnotherActivity";   
            <intent-filter>
                <action android:name="android.intent.action.VIEW" /> 

  <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />               <data
                    android:host="another"
                    android:scheme="loveya" />
 </activity>  

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值