day4 Activity相关

什么是Activity?

与用户交互的接口,提供用户触摸,点击,滑动的界面。Android中的activity全都归属于task管理 。task 是多个 activity 的集合,这些 activity 按照启动顺序排队存入一个栈(即“back stack”)。android默认会为每个App维持一个task来存放该app的所有activity,task的默认name为该app的packagename。

四种状态?

  • running
    活动状态,也是activity处于栈顶的状态,这时用户触摸屏幕,activity会响应事件
  • paused
    activity失去焦点或者被比如对话框覆盖时的状态,这时activity只是失去焦点,所有的成员变量和状态都还在
  • stopped
    被其它Activity完全覆盖
  • killed
    activity被销毁

Activity生命周期,常见类型概述

Activity生命周期

第一想到的是那副经典的生命周期图,怎么叙述呢。Activity可以理解为一个界面,为了便于界面编程,安卓设计者赋予了Activity生命周期的概念,从产生到消亡,我们开发者可以在生命周期的对应阶段做相应处理,那么怎么做处理呢?就是Activity每到一个生命周期的阶段,就会回调对应的一个方法,比如创建时回调onCreate()。然后我简单介绍下Activity的一个完整的生命周期是怎样的顺序:

  • 首先创建时回调onCreate(),这里可以进行一些初始化操作,比如设置布局资源,然后onStart(),表明Acitivity正在启动,activity已处于可见状态,但是还没有处于前台显示的,就是用户还不能在此Activity进行交互。接着是onResume(),这个调用后会处于前台可见状态,用户可进行交互。
  • 点击Home键回到主界面(Activity不可见),会让activity退居到后台,这时onPause()会被调用,一般情况下,onStop()会在onPause()执行后调用,这时候表明整个Activity被停止或被完全覆盖,因为这个时候activity是不可见得,完全处于后台运行,另外当调用onPause后,如果系统内存吃紧,activity是有可能被回收的。
  • 当我们再次回到原Activity时,onRestart()会调用,表示这个Activity正在重新启动,从桌面回到APP,,onRestart()调用完后会调用onStart(),activity回到可见状态,和前面一样之后调用onResume,activity回到前台可见可交互状态。
  • 退出当前Activity时->onPause() -> onStop() -> onDestroy(),onDestroy会在activity彻底销毁前调用

anroid 进程优先级

  • 前台:处于前台和用户交互的activity或者和前台进程Activity绑定的Service所处的进程
  • 可见:处于可见,但不处于前台,用户不可以交互的进程
  • 服务:后台开启的Service服务
  • 后台:点击了Home,前台进程变为后天进程

activity被回收的状态和信息保存和恢复过程

onSaveInstanceState方法在Activity可能被回收之前调用,用来保存自己的状态和信息,以便回收后重建时恢复数据(在onCreate()或onRestoreInstanceState()中恢复),旋转屏幕重建Activity会调用此方法,而且要调用的话就一定发生在onStop方法之前,但并不保证发生在onPause的前面还是后面。onRestoreInstanceState方法这个方法在onStart 和 onPostCreate之间调用,在onCreate中也可以状态恢复,但有时候需要所有布局初始化完成后再恢复状态。

Activity的启动模式,每个启动模式的不同点是什么?

启动模式简单的说就是定义Activity实例与tack的关联方式

为什么定义启动模式:

  • 让某些Activity启动一个新的task
  • 让activity复用,而不是重新创建一个实例

定义方式:

  • 使用manitest文件,通过Activity的 android:launchMode="standard"属性
  • intent设置:靠Flag
    • FLAG_ACTIVITY_NEW_TASK:指定为singleTask模式
    • FLAG_ACTIVITY_SINGLE_TOP:指定为singleTop模式
    • FLAG_ACTIVITY_CLEAR_TOP:标识此Activity,当它启动时,在同一个任务栈中位于它上面的Activity都要出栈
    • FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS:标识此Activity不会出现在历史Activity的列表中

哪些启动模式:

  • standard 标准模式:总会为activity创建一个新的实例,并将该实例添加到当前task中,这种方式不会启动新的Task,只是将新的 Activity添加到原有的Task中。
  • singleTop:栈顶复用模式,这种模式下,如果新Activity已经位于任务栈的栈顶,那么此Activity不会被重新创建,同时他的onNewIntent方法会被回调。
  • singleTask:栈内复用模式
  • singleInstance:单实例模式,此种模式的Activity只能单独的位于一个任务栈中

如何在非活动Activity内存不足时被系统销毁前保存数据?

Activity中提供了一个方法:onSavedInstanceState(Bundle obj).当系统销毁一个Activity时,会将Activity的状态信息已键值对形式存放在bundle对象中. 第一次启动Activity时,这个bundle对象是空的,null.如果Activity被系统销毁了,然后用户要回退回去看的话,系统会调用这个Activity的onCreate方法,并把bundle对象传递过去.

横竖屏切换时,Activity的生命周期会有那些变化?

1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
2、设置Activity的android:configChanges=”orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
3、设置Activity的android:configChanges=”orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

Activity如何设置为Dialog样式?

在AndroidManifest.xml 中定义Activity的地方一句话android:theme=”@android:style/Theme.Dialog”或android:theme=”@android:style/Theme.Translucent”就变成半透明的,也可以在onCreate代码中设置主题。

Context,Application,Activity的区别与联系?

Context:提供应用环境全局信息的接口,并且这个接口是由抽象类实现的,它的执行被android系统所提供,允许我们获取以应用为特征的资源和类型,同时启动应用级的操作,如启动Activity,broadcasting和接收intent。

Application-Context的生命周期与Application的生命周期相关,context随着Application的销毁而销毁,伴随application的一生,与Activity的生面周期无关。

Activity-Context:这个Context的生命周期是和得到它的引用的Activity一样长,如果这个Activity结束了,那么,这个Context也会得到释放

使用context的时候,要小心内存泄漏,防止内存泄漏

  • 不要让生命周期长的对象引用Activity context,即保证引用activity的对象要与activity本身生命周期是一样的
  • 对于生命周期长的对象,可以使用Application-context
  • 避免非静态的内部类,尽量使用静态类,避免生命周期问题,注意内部类对外部类对象引用导致的生命周期的变化。

Activity之间进行数据传递的方式有哪些?

  • intent传递数据
  • 先把数据保存到本地,然后在下一个Activity中从本地获取,存储方式可以是四种持久化存储方式:SharePreferences,SQlite,Content Provider和File
  • 使用EventBus类似的事件总线
  • 使用广播

如何退出Activity?如何安全退出已调用多个Activity的Application?

  • 记录打开的Activity:每打开一个Activity,就记录下来,在需要退出时,关闭每一个Activity,Activity记录可在自定义的Application执行,Application可实现一个接口,该接口会返回相应启动或销毁的Activity实例
  • 在需要结束应用时,发送一个特定的广播,每一个Activity收到广播后关闭
  • 通过intent的flag来实现,根据应用界面的交互场景利用Activity的启动模式来设计。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,028评论 25 707
  • 个人总结: 一个应用程序只有一个任务栈(Stack); 一个应用程序可以有多个Task(一个Task表现于回退栈,...
    画十阅读 1,697评论 0 3
  • 希望自己能够坚持自我。开始全新。能够做的自己的要求。不要逼到眼前才会去做,不要傻了。你一个人加油吧
    卡卡岩阅读 278评论 6 3
  • 1. 他死了为了寻一只三个月大的小羊掉进了山崖再未醒来 晚上八点一路寻到深夜四点山路崎岖 妻在家一夜未睡心里有着从...
    大小简阅读 195评论 0 0
  • 目录 这一夜虽身在荒山野岭之中,我却睡得格外安稳,不知是净玄的梵语起了作用,还是因为有他在身边,让人觉得分外安心的...
    冷清持阅读 551评论 7 18