Activity基本概念

目录

1.android:alwaysRetainTaskState

2.android:clearTaskOnLaunch

3.android:configChanges

4.android:excludeFromRecents

5.android:finishOnTaskLaunch

6.android:launchMode(Activity加载模式)

7.android:multiprocess

8.android:noHistory

9.android:screenOrientation

10.android:stateNotNeeded

11.android:windowSoftInputMode

 

Activity通常是应用程序中的单个屏幕,每个Activity都是作为扩展Activity基类的单个类来实现的。移动转换到另外一个屏幕界面是通过开始一个新的Activity来实现的。在某些情况下,一个Actiivit可能会返回一个值回到前一个Activity界面。当一个新的屏幕打开时,前一个屏幕会暂停并推送到历史堆栈里。Android系统保留了从主屏幕启动的每一个应用程序的历史堆栈,因此用户可以通过历史打开的屏幕向后导航。如果不需要保留,也可以选择从历史堆栈中删除界面。

接下来介绍Activity的属性。

1.android:alwaysRetainTaskState

是否保存状态不变。例如:切换Home,在重新打开,则Activity处于最后的状态。当一个浏览器拥有很多状态(当打开多个TAB),用户并不希望丢失这些状态时,可将此设置为true。

2.android:clearTaskOnLaunch

用来表明当再次启动Task时,系统是否会清除了跟Activity以外的所有Activity,默认值是false.

3.android:configChanges

可以在manifest.xml文件中指定Android参数configChanges,用于捕获手机状态的改变,如屏幕方向(orientation)的变化。在Activity中添加了android:configChanges属性后,当所指定的属性发生改变时,会通知程序调用onConfigurationChanged()函数。设置方法是将字段用“|”符号分隔开,如“locale|navigation|orientation”.在Android默认情况下,当oritaiton变化时会销毁Activity,然后创建新的Activity。如果不希望重新创建Activity,可以在AndroidManifest..xml中配置Activity:<activity android:name=".MainActivity" android:configChanges="|orirntation">,这样就不会在oritaiton变化时销毁重建Activity,而是调用Activity的onConfigurationChanges()方法。

4.android:excludeFromRecents

是否可被显示在最近打开的Activity列表里。默认值是false.

5.android:finishOnTaskLaunch

当用户重新启动这个任务时,是否关闭已打开的Activity。默认值是false。

这个属性与上面的clearTaskOnLaunch很像,不过它是指单个Activity,而不是整个栈。当设置为true时,Task重启后,这个 Activity就不显示了。默认值是false。

6.android:launchMode(Activity加载模式)

在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。如果希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。这就需要为Activity配置特定加载模式,而不是使用默认的加载模式。

Activity有中加载模式:standard、singleTop、singleTask、singleInstance(其中前两个是一组、后两个是一组)。默认为standard。

standard:这是个默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,每次跳转都会生成新的Activity,次模式下可以有多个相同的实例,也允许多个相同的Activity叠加。

singleTop:也是发送新的实例,但singleTop不同于standard的一点是,当请求的Activity正好位于栈顶时(配置成singleTop的Activity),不会构造新的实例。

singleTask:和后面的singleInstance为一组,都只会创建一个实例。当Intent到来,需要创建设置为singleTask的Activity时,系统会检查栈中是否已经有该Activity的实例,如果有则直接将Intent发送给它。

singleInstance:首先说明一下Task这个概念,Task可以被认为是一个栈,可存放多个Activity。例如,如果要启动一个应用,Android会创建一个Task,随后这个应用的入口即被启动,如果调用其他Activity也在同一个Task里面。如果在多个Task中共享一个Activity该如何处理呢?举个例子,如果开启一个导航服务类的应用程序,里面有一个Activity是开启Google地图的,当按下Home键退出回到主菜单又启动Google地图的应用时,显示的就是刚才的地图,这实际上是因为他们是同一个Activity,即引入了singleInstance。singleInstance模式下就是将Activity单独放在一个栈中,这个栈中只有这一个Activity,不同应用的Intent都这个Activity接收和展示,这样就做到了共享。当然前提是这些应用都没有被销毁,按下Home键即保存了这些应用,如果按下返回键,则无效。

7.android:multiprocess

是否允许许多进程。默认值为false。

8.android:noHistory

当用户从Activity上离开并且它在屏幕上不再可见时,Activity是否从Activity stack中清除并结束。默认值是false,Activity不会留下历史痕迹。

9.android:screenOrientation

Activity显示的模式。默认值是unspecified。系统自动判断显示方向,landscape为横屏模式,宽度比高度大;portrait为竖屏模式,高度比宽度大。user模式:用户当前首选的方向。beind模式:和该Activity下面的那个Activity大方向一致(在Activity堆栈中)。ensor模式:由物理的感应器来决定,如果用户旋转设备则屏幕会横竖屏切换。nosensor模式:忽略物理感应器,这样就不会随者用户旋转设备而更改了。

10.android:stateNotNeeded

Activity被销毁或成功重启时是否保存状态。

11.android:windowSoftInputMode

Activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题。

通常情况下,Activity有三种状态:当屏幕前台时,响应用户操作的Activity,处于激活或运行状态;当它上面有另外一个Activity,使它失去焦点但仍然对用户可见时,处于暂停状态;当它完全被另外一个Activity覆盖则处于停止状态。Activity从一种状态转变到另一种状态时,会调用其生命周期方法。Activity一共7中生命周期方法具体如下表1-1所示。

表1-1 Activity生命周期
方法名说明
void onCreate()设置布局及进行初始化操作
void onStart()可见,但不可交互
void onRestart()调用onStart()
void onResume()可见,可交互
void onPause()部分可见,不可交互
void onStop()

完全不可见

void onDestory()

销魂

 

 

 

 

 

 

 

 

 

startActivity开启一个Activity时,生命周期执行的方法是:onCreate()->onStart()->onResume()

单击Back键关闭Activity时,生命周期执行的方法是:onPause()->onStop()->onDestory()

当开启一个新的Activity(以对话框形式),新的Activity把后面的Activity盖住一部分时,后面的Activity的生命周期执行的方法是:onPause()注意,指定Activity一对话框的形式显示,需要在Activity节点追加以下主题Android:theme="@android:style/Theme.Dialog"。

当把新开启的Activity(以对话框形式)关闭时,后面的Activity的生命周期执行方法是:onResume()。

当把新开启的Activity,把后面的Activity完全盖住时,生命周期执行的方法是:onPause()->onStop()。

当把新开启的Activity(完全盖住)关闭时,生命周期的执行方法是:onRestart()->onStart()-onResume()

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值