Home Button
杀死所有活动
在 iOS 设备上,当用户按下设备的 Home 键时,应用程序将收到 killsession 消息。这导致所有活动应用程序被关闭,用户返回到主屏幕。
概念
分类
优势
应用场景
推荐的腾讯云产品
产品介绍链接地址
注意
就像我在视频标题里说的,当用户在使用 App 的时候按下了 Home 键,然后再切回来,或者在多个 App 之间切来切去,App 的内容会不会改变、会怎么改变、要怎么让它按你的需求去变或不变,这些问题都需要你对...因为按照用户使用邮件的习惯,如果现在按下最近任务键,用户会期望看到邮箱 App 的 Task 出现在短信 Task 的旁边,并且当它点击这个 Task,或者当它切回桌面点击邮箱 App 的图标,他都会期望回到写邮件的界面继续写...前台 Task 进入后台最常见的场景有两种:按 Home 键回到桌面,以及按最近任务键查看最近任务。需要注意的是:前台 Task 是在显示最近任务的时候就已经进入了后台,而不是在你切换到其他应用之后。...所以如果用户从短信进入邮箱以后没有按直接返回键,而是先查看一下最近任务再马上按返回键切回去,这个时候虽然表面上看着没变,但实际上前台 Task 已经只剩下了一个。...那么在实际的操作中,它们的区别就是:在被启动之后,用户按返回键时,singleTask 会在自己的 App 里进行回退,而 singleInstance 会直接回到原先的 App;以及用户稍后从桌面点开
比如当资源配置发生改变、系统内存不足时,Activity就会可能被杀死。...有这么几种情况: 当用户按下HOME键时。...这是显而易见的,系统不知道你按下HOME后要运行多少其他的程序,自然也不知道activity A是否会被销毁,故系统会调用onSaveInstanceState,让用户有机会保存某些非永久性的数据。...以下几种情况的分析都遵循该原则 长按HOME键,选择运行其他的程序时。 按下电源按键(关闭屏幕显示)时。 从activity A中启动一个新的activity时。...则该方法不会被调用,例如,当正在显示activity A的时候,用户按下HOME键回到主界面,然后用户紧接着又返回到activity A,这种情况下activity A一般不会因为内存的原因被系统销毁,
,达到了共享这个实例,在单个程序中如:A->B(模式SingleInstance)->C,创建A实例,创建B实例(新返回栈中),创建C实例,当点击back键时,会C弹出栈,显示A,再次点击back键,A...activity,然后可以销毁所有的activity并且之后跳转到登录页面,如果想要退出到桌面,也可以加入杀死进程的代码,防止该程序进程在后台一直运行。...onSaveInstanceState()和onRestoreInstanceState()使用详解 https://www.jianshu.com/p/27181e2e32d2 注意 1、如果是用户自动按下返回键...2、每次用户旋转屏幕时,您的Activity将被破坏并重新创建。当屏幕改变方向时,系统会破坏并重新创建前台Activity,因为屏幕配置已更改,您的Activity可能需要加载替代资源(例如布局)。...,那么此时会调用onNewIntent()方法,生命周期调用顺序为: onCreate--->onStart--->onResume---按下Home键>onPause--->onstop--->onNewIntent
这种情况下系统并不会关闭所有打开的进程,而是选择性关闭,频繁的调度自然会拖慢系统。...当某个应用组件启动且该应用没有运行其他任何组件时,Android 系统会使用单个执行线程为应用启动新的 Linux 进程。默认情况下,同一应用的所有组件在相同的进程和线程(称为“主”线程) 中运行。...进程优先级 Android中总共有5个进程优先级(按重要性降序): ? Foreground Process:前台进程(正常不会被杀死) 用户当前操作所必需的进程。...它们不是当前所必须的,因此当其他更高优先级的进程需要内存时,系统可能 随时终止 它们以回收内存。...Home键退出和返回键退出的区别 Home键退出,程序保留状态为后台进程;而返回键退出,程序保留状态为空进程,空进程更容易被系统回收。Home键其实主要用于进程间切换,返回键则是真正的退出程序。
Paused ——>Running所执行的生命周期为:OnResume() 当前重新回到活动状态(Running),此情况用户操作home键,然后重新回到当前activity界面发生。...当一个Activity处于暂停状态或停止状态时就随处可能进入死亡状态,因为系统可能因内存不足而强行结束该Activity。...onPouse() 当另外一个activity覆盖当前的acitivty时,此时当前activity会进入到onPouse()方法中,当前activity是可见的,但不能与用户交互状态。...onRestart() onRestart()方法在用户按下home()之后,再次进入到当前activity的时候调用。...Home键 : Activity 进入了后台, 此时会调用该方法; 按下电源键 : 屏幕关闭, Activity 进入后台; 启动其它 Activity : Activity 被压入了任务栈的栈底
2、当我们在玩游戏的时候,可能又想听歌,然后我们会按home或者back键退出游戏去启动音乐,然后再回到游戏,当我们回到游戏的时候,发现刚刚的状态还是被保存的。这种情况,我们可以这样保存状态。...activity A)显示在当前task的最上层时,其onSaveInstanceState方法会在什么时候被执行,有这么几种情况: 1、当用户按下HOME键时。...这是显而易见的,系统不知道你按下HOME后要运行多少其他的程序,自然也不知道activity A是否会被销毁,故系统会调用onSaveInstanceState,让用户有机会保存某些非永久性的数据。...以下几种情况的分析都遵循该原则 2、长按HOME键,选择运行其他的程序时。 3、按下电源按键(关闭屏幕显示)时。 4、从activity A中启动一个新的activity时。...,用户按下HOME键回到主界面,然后用户紧接着又返回到activity A,这种情况下activity A一般不会因为内存的原因被系统销毁,故activity A的onRestoreInstanceState
onResume():表示Activity已经可见了,并且出现在前台并开始活动。 onPause():表示 Activity正在停止,仍可见,正常情况下,紧接着onStop就会被调用。...一般情况下,当当前Activity从不可见重新变为可见状态时,onRestart就会被调用。...这种情形一般是用户行为导致的,比如用户按Home键切换到桌面或打开了另一个新的Activity,接着用户又回到了这个Actvity。...回调如下:onRestart()- onStart()- onResume() ④按back键回退时,回调如下:onPause()- onStop()- onDestory() ⑤按Home键切换到桌面后又回到该...当系统内存不足时,会按照上述优先级从低到高去杀死目标Activity所在的进程。
比如用户按HOME键切换到桌面或者用户打开了一个新的Activity这时当前的Activity就会暂停 也就是onPause和onStop被执行了接着用户又回到这个Activity就会出现这种情况...onStart() 表示Activity正在被启动 即将开始 这是Activity已经可见 但还没出现在前台 还无法与用户交互 (4)onResume 表示Activity已经可见了 并出现在前台并已经开始活动...(5)onPause 表示Activity正在停止 正常情况下onStop就会被调用 特殊情况下 如果这个时候快速回到当前Activity那么onResume会被调用 onPause必须先执行完新...onRestart->onStart->onResume (4)当用户back键回退时 onPause-> onStop->onDestroy (5)当Activity被系统回收后再次打开 生命周期回调过程和...Activity的时候旧Activity的onPause会先执行然后才会启动新的Activity 异常情况下的生命周期分析 情况1 资源相关的系统配置发生改变导致Activity被杀死并重新创建 当系统配置发生变化后
键: onPause->onStop 当一个Activity按Home键切换到桌面后又回到该Activity回调哪些方法。...onPause->onStop->onRestart->onStart->onResume 当一个Activity按back键回退时回调哪些方法 onPause->onStop->onDestory Activity...当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState() 会被调用,该方法的调用在onStop之前,与onPause没有时序关系...但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用。因为在这种情况下,用户的行为决定了不需要保存Activity的状态。...onSaveInstanceState()时机: (1)用户按下Home键 (2)横竖屏切换 (3)按下电源按钮(关闭屏幕显示) (4)内存不足导致优先级的Activity被杀死 onRestoreIntanceState
当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState() 会被调用。...这个方法在一个activity被杀死前调用,当该activity在将来某个时刻回来时可以恢复其先前状态。 ...onSaveInstanceState方法会在什么时候被执行,有这么几种情况: 1、当用户按下HOME键时。...以下几种情况的分析都遵循该原则 2、长按HOME键,选择运行其他的程序时。 3、按下电源按键(关闭屏幕显示)时。 4、从activity A中启动一个新的activity时。...,用户按下HOME键回到主界面,然后用户紧接着又返回到activity A,这种情况下activity A一般不会因为内存的原因被系统销毁,故activity A的onRestoreInstanceState
按钮,并且按get按钮 当然了,这时候按back按钮,当再次进入后,会发现输入框里没有内容,同时按get得到为0.0 同时第一种情况中我的打印Log.i("FiveActivity", "onSaveInstanceState...这次不按Back键,这次按Home键: 当我们按Home键后,我们的Activity就处于stop状态,这时候我们的打印语句出现了 这时候我们手动杀死FiveActivity 这时候在启动Activity...,当再次get时就会发现: EditText中的文字Hello World依旧存在,而我的Value变量变为0.0了。...所以当我们Home出去时就会打印出现,至于我们的变量为啥没有恢复,很明显那是因为没人保存它的值,这就得需要我们程序员自己手动保存。...onSaveInstanceState"); outState.putFloat("1234", value); super.onSaveInstanceState(outState); } 这样的话,当杀死进程后
活动状态管理: 当应用程序处于前台活动状态时,AMS会监控用户与应用程序的交互,比如按下Home键、切换到其他应用等。...任务栈是一个后进先出(LIFO)的堆栈结构,其中存储着应用程序启动的各个活动的实例。当一个新的活动启动时,它会被推入任务栈的顶部;当用户按下Back键或者活动被销毁时,该活动会被从任务栈中弹出。...当一个新的Activity启动时,它会被压入任务栈的栈顶;当用户按下返回键时,该Activity会被弹出栈顶。...通常情况下,系统会保持至少一个前台进程,以确保用户体验;当系统内存不足时,AMS会优先杀死后台进程,以释放内存资源。 其它 问题: Android中的内存管理机制是怎样的?AMS是如何参与其中的?...内存压力: 当系统内存不足时,Android系统会采取一系列措施来减少内存压力,比如杀死一些后台进程、清理缓存数据等。
可以对多个标记的进程执行操作,如“杀死”,而非仅对当前高亮的进程操作。 c 标记当前进程及其子进程。 U 取消所有进程的标记(移除使用空格或c键添加的所有标记)。...l 显示进程打开的文件:如果安装了 lsof(1),按下此键将显示该进程打开的文件描述符列表。 w 在单独的屏幕上显示选定进程的命令行,必要时换行。...当子树被折叠时,进程名称左侧显示一个"+"号。按""将展开或折叠所有没有父进程的PID的所有子进程,通常是PID 1(init)和PID 2(在Linux上如果显示内核线程,则为kthreadd)。...N 按PID排序。 M 按内存使用排序(兼容top命令的快捷键)。 P 按处理器使用率排序(兼容top命令的快捷键)。 T 按时间排序(兼容top命令的快捷键)。...这将显示一个动态更新的界面,列出所有活动进程及其当前状态。 (2)设置更新间隔。
当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁 一个Activity时,onSaveInstanceState() 会被调用。...但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用。因为在这种情 况下,用户的行为决定了不需要保存Activity的状态。...(假定为activity A)显示在当前task的最上层时,其onSaveInstanceState()方法会在什么时候被执行,有这么几种情况: (1)、当用户按下HOME键时。 ...以下几种情况的分析都遵循该原则 (2)、长按HOME键,选择运行其他的程序时。 (3)、按下电源按键(关闭屏幕显示)时。 ...确实”被系统销毁了,而如果仅仅是停留在有这种可能性的情况下,则该方法不会被调用,例如,当正在显示activity A的时候,用户按下HOME键回到主界面,然后用户紧接着又返回到activity A,这种情况下
#### 情景二 程序从前台退出到后台 当程序处于前台时,单击home键,程序会自动退出到后台。在这个过程中,程序会先回调delegate的将要失去焦点的方法,证明程序**`将要失去焦点`**。...#### 情景四 双击home键切换程序 在前台,双击home键,只会调用delegate的将要失去焦点的方法,证明```程序将要失去焦点```。...####情景五 在前台双击home键杀死程序 双击home键时,只会调用delegate的将要失去焦点的方法(上面已经说过),证明程序将要失去焦点。...- (void)applicationWillTerminate:(UIApplication *)application; > 结论:双击home键然后杀死程序,会按照如下顺序调用delegate的方法...; ``` ####情景六 从其他程序前台双击home键杀死后台程序 如果从其他程序的前台,双击home键杀死后台程序,被杀死程序只会回调delegate即将退出的方法。
图一说明了当activity被加载时会位于栈顶,当按下BACK键时activity会被弹出栈并且被销毁。...如图二所示,假设任务栈A此时处于前台且栈中有三个activity a –> b—>c a处于栈顶,如果用户按下了home键并且开启了一个新的任务栈B,当再次按下home键时任务栈B进入后台,然后用户再次开启任务栈...如果此时按下BACK键,activityB就会被销毁,activityA就会重新resume获取焦点并且恢复所保存的数据 当用户按下HOME键回到主屏幕时,activity就会被stopped并且此时任务栈会进入后台模式...虽然activity是在一个新的任务栈中开启的但是按下back键仍旧会返回先前的activity(此时按下back键是把目前处于前台的任务栈即承载该activity的任务栈销毁,显示开启该任务栈之前的任务栈...无论打开activity时是放置在当前任务栈还是重新去开启一个任务栈,按下BACK键总是返回先前的activity。
每当我们开启一个新的活动,它会在返回栈中入栈,并处于栈顶的位置;而每当我们按下Back键或调用finish()方法去销毁一个活动时,处于栈顶的活动会出栈,这时前一个入栈的活动就会重新回到栈顶的位置。...每个活动在其生命周期汇总最多可能有四种状态: 运行状态:当一个活动处于栈顶位置,系统最不愿回收的就是处于运行状态下的活动 暂停状态:当一个活动不再处于栈顶位置,但是仍然可见。...(因为并不是每一个活动都会布满屏幕,例如Toast等出现时,前一个活动就是暂停状态),该状态下的活动仍然是完全存活的,系统也不愿意去回收 停止状态:当一个活动不再处于栈顶位置,并且完全不可见时,系统愿意为这种活动保存相应的状态和变量...当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState() 会被调用。...但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用。因为在这种情况下,用户的行为决定了不需要保存Activity的状态。
界面或按 Home 键回到主屏: onPause() —> onStop() ,进入停滞状态。...onSaveInstanceState() 方法,当应用遇到意外情况(如:内存不足、用户直接按 Home 键)由系统销毁一个 Activity ,onSaveInstanceState() 会被调用。...但是当用户主动去销毁一个 Activity 时,例如在应用中按返回键,onSaveInstanceState() 就不会被调用。...3.3 onSaveInstanceState() 被执行的场景 系统不知道你按下 HOME 后要运行多少其他的程序,自然也不知道 activity A 是否会被销毁 因此系统都会调用 onSaveInstanceState...以下几种情况的分析都遵循该原则: 当用户按下 HOME 键时 长按 HOME 键,选择运行其他的程序时 锁屏时 从 activity A 中启动一个新的 activity 时 屏幕方向切换时 3.4 两个
多窗口 在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。...窗口还可以被分区和命名,还可以监视后台窗口的活动。会话共享Screen可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。...可以使用快捷键C-a A来为当前窗口重命名,按下快捷键后,Screen会允许你为当前窗口输入新的名字,回车确认。...另一个关闭窗口的方法是使用Ctrl+a键,然后按下k键,最后当提示你是否要杀死这个会话时按下y键,这个快捷键会杀死当前的窗口,同时也将杀死这个窗口中正在运行的进程。...除了依次退出/杀死当前Screen会话中所有窗口这种方法之外,还可以使用快捷键C-a :,然后输入quit命令退出Screen会话。需要注意的是,这样退出会杀死所有窗口并退出其中运行的所有程序。
我们现在来重现这个熟悉的一幕: 假设:App A -> B -> C 在C activity中点Home键后台运行,打开ddms,选中该App进程,强杀。...所以回到App时,显示的还是C页面。另外当activity被强杀时,系统会调用onSaveInstance去让你保存一些变量,但我个人觉得面对海量的静态变量,这个根本不够用。...既然App都被强杀了,干嘛不重新走第一次启动的流程呢,别让App回到D而是启动A,这样所有的变量都是按正常的流程去初始化,也就不会空指针了,对吧?有人说这方案用户体验一点都不好呀。...也就是说中断C的初始化而回到A,并且按back键,不会回到C,B。考虑一下。 我们先实例化这个场景吧。...当应用被杀死之后,所有数据都会被回收,所以之前设置的app status也会置于默认状态,即杀死状态,所以再次打开app的时候,status为杀死状态,就会走重启的流程,这里为什么要先跳转到MainActivity
领取专属 10元无门槛券
手把手带您无忧上云