Activity的启动模式和生命周期 android初学者必看;

相信大家在学习的过程中都考虑Activity生命周期,


如果一味的任由activity默认启动模式的话,


那么在activity来回跳转的时候,就会开启好多个activity,


这样在无形中浪费了好多内存,


所以,这时候就给activity设置了启动模式。


设置时候只需要在AndroidManifest.xml里对应的<activity>标签里设置

android:launchMode="singleTop"
属性,例如:


下面就是我给设置的singleTop模式

<activity android:name=".MainActivity"
    android:launchMode="singleTop">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>


Activity的四种启动模式:


standard:这是默认模式,每次激活Activity时都会创建Activity实例,并放入任务栈中。 //简单的说  这个就是一个劲的往上放  有多少放多少


singleTop: 如果在任务的栈顶正好存在该Activity的实例,就重用该实例( 会调用实例的 onNewIntent() ),否则就会创建新的实例并放入栈顶,即使栈中已经存在该Activity的实例,只要不在栈顶,都会创建新的实例。 //其实这个就是上一次打开的Activity如果还活着的话还在最顶层就会被重用,否则新建


singleTask:如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的 onNewIntent() )。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移出栈。如果栈中不存在该实例,将会创建新的实例放入栈中。//如果以前有了则拿出来用  没有就新建


singleInstance:在一个新栈中创建该Activity的实例,并让多个应用共享该栈中的该Activity实例。一旦该模式的Activity实例已经存在于某个栈中,任何应用再激活该Activity时都会重用该栈中的实例( 会调用实例的 onNewIntent() )。其效果相当于多个应用共享一个应用,不管谁激活该 Activity 都会进入同一个应用中。


至于什么是栈,如果这个还不懂的话就先理解为存放Activity的容器


下面来讲一下Activity的生命周期


如下图


20131118143741.jpg


 在Activity中有7个与生命周期相关的方法。


onCreated()是activity第一次被启动时执行的,主要是初始化一些变量,


onStart()是activity界面被显示出来的时候执行的;


onResume()是当该activity与用户能进行交互时被执行;


onPause()是另一个activity被启动,当前的activity就被暂停了,一般在该函数中执行保存当前的数据;


onStop()表示另一个activity被启动完成时,当前activity对用户同时又完全不可见时才调用的;


onDestroy()是退出当前activity时调用的,当然如果程序中调用finish()或者说android系统当前资源不够用时就会被调用。


onRestart()是当前activity重新被启动时调用的;绑定一些监听器等;


这写生命周期是需要记下来的,要是一回记不住的话,多写几回就记住了



当用多个activity在执行时,这时候android系统会自动将这些activity压入栈中并且总是显示最顶的那个activity,这个栈在android叫做task,但是这个栈只支持压入和弹出操作,不支持排序插入等操作。


Activity的7个生命周期函数中的onStop()函数被调用时是在其对应的activity被另外的activity完全遮挡的时候,如果只有部分遮挡,则不会被调用。部分遮挡一般是以消息activtiy的形式出现,这个只需在AndroidManifest.xml中将其对于的activity的主题设置theme中更改即可。


这7个周期函数,当系统资源不够时,其中onPause(),onStop(),onDestroy()是有可能被系统kill掉的,但其它4个是不会被kill掉。


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值