Android应用运行在后台的时候,经常被系统的LowMemoryKiller杀掉,当用户再次点击icon或者从最近的任务列表启动的时候,进程会被重建,并且恢复被杀之前的现场。什么意思呢?...Android为了能够让用户无感知后台杀死,就做了这种恢复逻辑,不过,在开发中,这种逻辑带了的问题确实多种多样,甚至有些产品就不希望走恢复流程,本文就说说如何避免走恢复流程。...从最近的任务列表唤起,不走恢复流程 首先,APP端必须知道当前Activity的启动是不是在走恢复流程,Activity有一个onCreate方法,在ActivityThread新建Activity之后...,会回调该函数,如果是从后台杀死恢复来的,回调onCreate的时候会传递一个非空的Bundle savedInstanceState给当前Activity,只要判断这个非空就能知道是否是恢复流程。...作者:看书的小蜗牛 原文链接:被后台杀死后,Android应用如何重新走闪屏逻辑 仅供参考,欢迎指正
与App现场恢复机制(主要讲述AMS如何为App恢复现场的原理) 原理篇2:后台杀死与LowmemoryKiller(主要讲述App被后台杀死的原理) 本篇是Android后台杀死系列的第一篇,主要讲解在开发过程中...,这样才能保证重建流程,并且,Fragment的子类也不推荐有带参数的构造方法,最好采用setArguments来保存参数。...在Android中,onSaveInstanceState是为了预防Activity被后台杀死的情况做的预处理,如果Activity没有被后台杀死,那么自然也就不需要进行现场的恢复,也就不会调用OnRestoreInstance...对于startActivity函数的调用很多文章都有介绍,可以简单参考下老罗的博客Android应用程序内部启动Activity过程(startActivity)的源代码分析,比如在Activity A...如何处理杀死及恢复的文章。
运行活动的情景:当一个活动被启动时,活动中的 onCreate()、onStart()和 onResume()这 3 个方法被依次调用,活动对应的界面出现在屏幕上。...onPasuse()方法将被调用,活动转入后台运行。...活动被恢复的情景:当界面上最前面的活动退出后,它所覆盖的活动将被恢复,这时 onResume()方法将被调用,活动重新转入前台运行。...使用 StartService 运行服务的情景:使用这种方法启动服务,服务的 onCreate()和 onStart()这两个方法将被调用,服务会在后台运行直到退出,退出时将调用 onDestroy()...使用 bindService 运行服务的情景:使用这种方法启动服务,调用者(也就是服务的客户端)将获得和服务交互的类,通过其调用时服务的相关内容会处于活动状态。 3.
Activity 的 onStop() , 否则上个页面就不显示了 ) 1.2 横竖屏切换时 不设置 Activity 的 android:configChanges 时,切屏会重新调用各个生命周期...再次跳转页面到 CourseDetailActivity 时会直接复用原有的 Activity ,并且此页面须要展示的数据是从 getIntent() 方法得来,可是 initData() 方法不会再次被调用...5.3 服务进程 服务进程是通过 startService() 方法启动的进程,但不属于前台进程和可见进程。例如,在后台播放音乐或者在后台下载就是服务进程。...5.4 后台进程 后台进程是一个保持着一个当前对用户不可视的活动(已经调用 Activity 对象的 onStop() 方法)(如果还有除了 UI 线程外其他线程在运行话,不受影响)。...android 进程的回收顺序从先到后分别是:空进程,后台进程,服务进程,可见进程,前台进程。
Android退出应用程序方法总结 在Android开发中,我们运行了应用程序后,都需要退出应用的,那么该如何退出应用,又都有哪些实现方式呢?...因为通过杀进程方式退出,会被系统认为异常退出,会保存应用的一些状态信息比如Activity运行栈,然后会恢复这个应用。...当恢复一个Android应用程序时,会先从栈里面移除异常的Activity,相当于Back键操作。 3....而且该方法只是结束后台进程的方法,不能结束当前应用移除所有的 Activity。...退回系统桌面 Android应用开发中,有一种场景,就是我们不希望用户直接按Back键退出Activity,而是希望应用隐藏到后台的假退出,类似于按Home键的效果。
因此,可以通过onRestoreInstanceState方法来恢复Activity的状态,该方法的调用时机是在onStart之后。...其中onCreate和onRestoreInstanceState方法来恢复Activity的状态的区别: onRestoreInstanceState回调则表明其中Bundle对象非空,不用加非空判断...,调用stopService(Intent)方法停止服务 使用start方式启动的生命周期 onCreate()->onStartCommand()->onDestory(); 如果服务已经开启,不会重复回调...onCreate() 方法,如果再次调用 startService()方法,service 而是会调用 onstart或者 onStartCommand()。...ServiceConnection,int )方法启动Service 不再使用时,调用unbindService()方法停止该服务 生命周期,只会绑定一次,当多次调用绑定服务时,只会多次调用 startService
Activity 和 Fragment 通常会在下面三种情况下被销毁: 从当前界面永久离开: 用户导航至其他界面或直接关闭 Activity (通过点击返回按钮或执行的操作调用了 finish() 方法...当进程在后台被杀死后,用户又返回该应用时,Activity 也需要被重建。 在后两种情况中,我们通常都希望重建 Activity。...Saved State 模块 现在,ViewModel Saved State 模块将会帮您在应用进程被杀死时恢复 ViewModel 的数据。...在 Activity 或 Fragment 的 onCreate 方法中,将 ViewModelProvider 的调用修改为: //下面的 Kotlin 扩展需要依赖以下或更新新版本的 ktx 库:...正如前面所说,它能在 ViewModel 销毁时 (onCleared() 方法调用时) 退出。
Services 服务是一个应用程序组件,可以在后台执行长时间运行的操作,不提供用户界面。一个应用程序组件可以启动一个服务,它将继续在后台运行,即使用户切换到另一个应用程序。...onCreate() 服务第一次建立的时候会调用这个方法,执行一次性设置程序,在上面2个方法执行前调用。如果服务已存在,则不执行该方法。 onDestroy() 服务不再使用则使用该方法。...服务应该实现这个方法来清理诸如线程,注册的监听器等资源。这是最后调用的方法。 安卓系统只会在内存占用很高,必须恢复系统资源供当前运行程序的情况下强制停掉一个运行中的服务。...这适合像下载一样的服务,立即恢复,积极执行。 如果想从服务获得结果,可以用广播来处理 创建“绑定的”服务 用bindService()方法将应用组件绑定到服务,建立一个长时间保持的联系。...到这里再说一句,如果不是某些功能需要的服务,不建议这么做,会降低用户体验。 第三种情况: 强制关闭就没有办法。这个好像是从包的level去关的,并不走完整的生命周期。
1、从最基础的开始说—>生命周期 Activity有7个生命周期:onCreate(); onStart(); onResume(); onPause(); onStop(); onDestroy();...并且不管如何调用,onCreate始终只会调用一次,对应startService调用多少次,Service的onStart便会调用多少次。...调用unbindService将不会停止Service,而必须调用 stopService 或 Service的 stopSelf 来停止服务。 Q:Service如何和Activity进行通信?...,因此它在Android中非常重要 Q:如何保证Service不被杀死?...(1)android平台提供了ContentProvider使一个应用程序的指定数据集提供给其他应用程序。其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据。
此时Activity已经从栈中移除了。 3、监控状态改变 为了保证Activity可以对状态改变做出反应,Android提供了一系列的回调方法,当Activity的状态改变时它们就会被触发。...{ 38 super.onResume(); 39 /* 40 * 恢复Activity需要,但是当它处于不活动状态时被挂起的暂停的UI更新、线程或进程...应该使用这个Bundle将UI恢复为上一次的状态,既可以通过onCreate方法也可以重写onRestoreInstanceState。 ...当UI再次启动时,可以用onStart或者onRestart方法来恢复或者重启这些进程。 onRestart在除了对onStart方法的第一次调用之外的所有方法之前被立即调用。...尽量让onPause和onResume方法中的代码执行迅速,尽可能少。以保证前后台切换时能够保持响应。 onResume方法可以是轻量级的。
windows下的服务:没有界面、长期运行在后台的应用程序; android下的服务:应用程序的一个组件,没有界面activity,长期运行在后台; 进程:是应用程序运行的载体。...进程的生命周期: 1、应用程序一启动的时候就创建了进程; 2、当应用程序退出的时候进程并没有退出; 3、只有手工停止这个进程,进程才会结束; 操作系统尽量长时间的运行应用程序的进程,为了保证内从空间不被大量占用...Service process (服务进程) 应用程序没有界面,但是有一个后台的服务还处于运行状态 Background process(后台进程) 应用程序没有服务处于运行状态,应用程序被最小化了...绑定服务、unBindService解除绑定的服务; 服务是在被绑定的时候被创建,调用oncreate、onbind方法; 服务只能被绑定一次; 服务只能被解除一次,接触绑定的时候调用onUnbind、...onDestrory方法,如果多次解除绑定会抛出异常; 推荐的方式: startService:开启并创建一个服务,服务长期运行在后台; bindService:绑定服务,可以调用服务里面的方法; unBindService
在这个过程中会针对不同的生命阶段会调用不同的方法 Activity从创建到销毁有多种状态,从一种状态到另一种状态时会激发相应的回调方法,这些回调方法包括: oncreate:Activity对象创建完毕...1、抛异常强制退出: 该方法通过抛异常,使程序Force Close。不推荐使用 验证可以,但是,需要解决的问题是,如何使程序结束掉,而不弹出Force Close的窗口。...但是需要注意,我们是完全有可能对一个服务既调用了startService()方法,又调用了bindService()方法的,这种情况下该如何才能让服务销毁掉呢?...start –> bind -> unbind -> stop 经常使用服务长期后台运行,又可以调用服务中的方法 service如何杀不死?...当然还有其他好处,有心人会发现Android后台进程里有很多应用是多个进程的,因为它们要常驻后台,特别是即时通讯或者社交应用,不过现在多进程已经被用烂了。
onPause()这个方法在系统准备去启动或者恢复另一个活动的时候调用。...4.销毁:从返回栈中移除之后,系统最喜欢的就是回收这种活动。 4.Android应用程序的四大核心组件分别是什么?...特点:Service在后台运行,不用与用户进行交互。即使应用退出,服务也不会停止。当应用进程被杀死时(例如一键清理),服务便会停止。 13.本地服务与远程服务的优缺点各是什么?...本地服务 --local service:服务运行在当前的应用程序里面 远程服务 --remote service:服务运行在其他的应用程序里面 14.如何实现本地服务绑定方式的启动与停止?...有了 Service 类我们如何启动他呢,有两种方法: •Context.startService() •Context.bindService() 在同一个应用任何地方调用startService
生命周期中各个方法的含义和作用 常见生命周期 onCreate:create表示创建,这是Activity生命周期的第一个方法,也是我们在android开发中接触的最多的生命周期方法。...但也有很多人将很多与初始化无关的代码放在这,其实这是不规范的。 此时Activity还在后台,不可见。...onCreate方法只在Activity创建时执行一次,而onStart方法在Activity的切换以及按Home键返回桌面再切回应用的过程中被多次调用。...,此方法会被调用; 在用户改变屏幕方向时,此方法会被调用; 在当前Activity跳转到其他Activity或者按Home键回到主屏,自身退居后台时,此方法会被调用。...我们可以重写此方法,以便可以恢复一些临时数据。 onRestoreInstanceState的调用顺序是在onStart之后;
如何进行 UI 状态的存储与恢复? Activity 和应用进程的关系 在什么时机触发 LeakCanary 的检测?...那 不一定不可见 如何理解呢?其实也很简单,类似 PC 的多窗口,Android 系统也是有多窗口模式的。...当 Activity 重新创建时,会通过 onCreate() 或者 onRestoreInstanceState() 方法恢复状态。...所以一般建议直接在 onRestoreInstanceState 方法中进行状态恢复即可。 对于非 UI 状态的其他数据,就得自己手动进行保存和恢复了。...最后来说一下 onSaveInstanceState 的调用时机问题。在不同的 SDK 版本中,这个时机是不唯一的。
---- 前言 多线程的应用在Android开发中是非常常见的,常用方法主要有: 继承Thread类 实现Runnable接口 AsyncTask Handler HandlerThread...问题1:IntentService如何单独开启一个新的工作线程 // IntentService源码中的 onCreate() 方法 @Override public void onCreate()...msg) { // onHandleIntent 方法在工作线程中执行,执行完调用 stopSelf() 结束服务。...由于onCreate() 方法只会调用一次,所以只会创建一个工作线程; 2....对比 8.1 IntentService与Service的区别 从属性 & 作用上来说 Service:依赖于应用程序的主线程(不是独立的进程 or 线程) 不建议在Service中编写耗时的逻辑和操作
这些钩子可以在正常的生命周期(正常是由操作系统控制的)之外控制Android控件的运行。 它们同时可以控制Android如何加载应用程序。...2.2 绑定过程 2.2.1 只使用startService启动服务的生命周期 如果仅仅只是为了开启一个后台任务,那么可以使用startService方法。...这是最安全的选项,可以避免在不必要时以及应用能够轻松重启所有未完成的作业时运行服务 START_STICKY 如果系统在 onStartCommand() 返回后终止服务,则会重建服务并调用 onStartCommand...这适用于不执行命令、但无限期运行并等待作业的媒体播放器(或类似服务 START_REDELIVER_INTENT 如果系统在 onStartCommand() 返回后终止服务,则会重建服务,并通过传递给服务的最后一个...这适用于主动执行应该立即恢复的作业(例如下载文件)的服务 2.4 Service 与 Activity 通信 可以看看这篇:Android Service和Activity的相互通信 2.5 启用前台服务
写的很是清楚啊 在这个流程图中可以看到有三个关键的循环 entire lifetime:activity的完整周期:从activity第一次调用onCreate开始到最后调用ondestroy为止。...例如,如果activity在后台开启一个网络下载进程,activity会在onCreate方法中开启该线程,并在onDestroy方法中停止该线程。...如果onCreate传入的bundle参数不为null的话,可以从bundle中获取到activity先前的状态 No onStart onRestart() 当activity已经被stopped,但又重新加载时调用...从Android3.0开始发生了改变。应用只有在onStop方法返回后才能被killable。...如果它的进程需要被杀死,当用户再次切换回该activity时(再次显示到屏幕上),会调用oncreate方法并且从savedInstanceState中取出先前onSaveInstanceState保存的数据
领取专属 10元无门槛券
手把手带您无忧上云