Activity

1.Activity 是什么?

1)Android 中的一个应用组件?(生命周期方法)

2)Android 中的Context?(强大的资源访问能力)

3)Android 中的Controller?(呈现view,访问model)

 

2.Activity 的应用场合?

1)呈现UI,实现与用户交互。

2)控制UI逻辑,访问model/模型。

 

Activity包含一个window窗口,可以此窗口呈现

UI对象。

 

3.Activity 对象的应用?

 


activity对象生命周期(对象从创建到销毁)

a)onCreate (Activity 创建时执行)

b)onRestart (Activity重新启动时执行)

c)onStart (Activity启动时执行)

d)onResume(Activity 运行时执行)

e)onPause (Activity 暂停时执行)

f)onStop (Activity 停止时执行)

g)onDestroy(Activity 销毁时执行)

2)activity对象状态保存(可以保存在内存或外存)

a)onSaveInstanceState (此方法用户状态保存)

b)onRestoreInstanceState(此方法用于状态恢复,也可以在onCreate方法进行状态恢复)

 

说明:

当app所在进程处于后台运行时,进程的优先级就

会降低,在内存不足时有可能会被kill,当一旦被

kill后,假如再次运行希望数据被恢复,可以在activity暂停时将状态信息进行保存。

 

 

应用效果
打开应用时

先后执行了onCreate()->onStart()->onResume三个方法

BACK键:

当我们按BACK键时,我们这个应用程序将结束,这时候我们将先后调用onPause()->onStop()->onDestory()三个方法

HOME键:

当我们打开应用程序时,比如浏览器,我正在浏览NBA新闻,看到一半时,我突然想听歌,这时候我们会选择按HOME键,然后去打开音乐应用程序,而 当我们按HOME的时候,Activity先后执行了onPause()->onStop()这两个方法,这时候应用程序并没有销毁。

再次启动ActivityDemo应用程序时

先后分别执行了onRestart()->onStart()->onResume()三个方法

4.Activity 对象的回退栈?


 

Activity在启动以后会存储在一个回退栈中,

栈顶元素为正在运行的activity,栈底最先启动

的那个activity.一个app进程可能会存在很多

这样的回退栈。

 

5.Activity 对象的启动模式(launchMode)?

 

Activity在启动时是可以指定启动模式的,一般

可以在清单配置文件中通过修改activity的launchMode属性进行配置,它的值有如下四种

类型:

1)standard(标准模式):

每次启动activity都会重新

   创建一个新的实例。(此模式为默认模式)

1)每次启动Activity时,都会创建该Activity的新实例

2)总是在当前任务中启动Activity的新实例

3 ) 一个任务中可以包含同一Activity的多个实例

4)同一Activity的多个实例 可以位于多个任务中

2)singleTop(栈顶模式):

当此activity已经是栈顶时,再次启动不会创建新的activity.

1)当该Activity不位于栈顶时,其表现与标准模式一致

2)当该Activity位于栈顶时,再次启动该Activity不会创建新的实例

   而是调用onNewIntent方法将启动意图传入处理,然后在使该实例

   重新进入交互状态

3)singleTask(单任务模式):

一个任务栈中此activity

的实例只能有一份,当它不是栈顶时,再次启动它

时,位于它上面的activity会销毁。

1)当该Activity启动时,首先判断当前任务的亲族值(taskAffinity)是否与该Activity的亲族值相同

        如果相同则在当前任务中创建实例,否则在新的任务中创建实例

注:默认不设置亲族值,那么每个Task的亲族值都一样。

 2)设置为singleTask的Activity是单例的。

 3)当重新启动该Activity时,首先将任务栈中位于其上的其他Activity销毁,再

        使该Activity进入交互状态

4)singleInstance(单实例模式):

在内存中此activity

实例只有一份,且会独享一个任务栈。

1) 设置为singleInstance的Activity是单例的。

2)该Activity不与其他Activity共存于同一任务中(假设为A任务)

        所以创建该Activity实例一定是在新的任务中 (假设为B任务)

        当通过该Activity启动其他Activity时,首先判断

        是否存在与被启动Activity亲族值相同的任务,如果存在

        则在该任务中创建Acitivity的实例,否则在新的任务中 (假设为C任务)

        创建实例

 

        这端话的意思就是说:当你进入一个应用时,开辟了A任务,然后当点击一个启动模式为singleInstance的Activity B 的时候,那么该Activity B 就一定会开辟任务B,然后在从该Activity B 启动其他 Activity C 的时候,那么就会判断Activity C 的亲族值和任务B的亲族值(其实就是Activity B 的亲族值)是否相同,如果相同,Activity C 就会在B任务中创建,否则开辟任务C,作为根Activity来创建实例。

6.Activity 的亲族设置?

 

Activity的亲族设置与启动模式会影响activity在

任务栈中的一个存储位置,亲族设置的配置需要

借助activity的taskAffinity属性进行配置。

 

在android中每个任务栈都有一个亲族值,此

值与回退栈的栈底activity的亲族值相同,每个

activity都有亲族值,假如没有配置默认与application对象的亲族值相同,application对

象的亲族值假如没有配置默认与清单配置文件

的根元素指定的包名(package)相同。

 

亲族值一般会与activity的单任务模式和单实例

模式一起使用。

 

singleTask模式的activity在启动时,首先检测内存中有没有相同亲族值的任务栈,假如没有会创建一个新的任务栈进行存储。通过singleTask模式启动的非singleInstance模式的activity会与这个singleTask模式的activity存储在同一个任务栈中。

 

singleInstance模式的activity在启动其它的activity时,这个activity存储在哪里取决于有没有相同亲族配置的任务栈,假如有则直接存储,假如没有则会创建一个新的任务栈,再进行存储。

taskAffinity
 1、任务吸附值或任务亲族值
 2、对于每个Application来说如果未明确设置,则该值与应用程序的主包名一致
 3、对于每个Activity来说,如果未明确设置,则该值与Activity所在的|Application的taskAffinity值相同
 4、对于task来说,该值与其任务栈栈底的Acitivity的taskAffinity值相同      

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值