https://blog.csdn.net/u014737138/article/details/49231103
本次推出 Android Architecture Components 系列文章,目前写好了四篇,主要是关于 lifecycle,livedata 的使用和源码分析,其余的 Navigation, Paging library,Room,WorkMannager 等春节结束之后会更新,欢迎关注我的公众号,有更新的话会第一时间会在公众号上面通知。
说到Activity的onDestroy,对所有的Android开发者都很熟悉,但是不一定都知道里面存在着一些坑,分享给大家,以后踩中的时候可以应急 用Activity的时候,会发现如下问题:
github sample 地址: ArchiteComponentsSample
利用DisposableObserver和SubscribeWith直接返回Disposable,然后取消
在Activity中调用finish()或按返回键退出时,若有资源被其他对象引用不能释放(如context被某个单例对象引用或正在线程中被使用),则activity不会被调用onDestory()方法。
和尚我前段时间整理过一些关于 Activity 与 Fragment 生命周期的小博文:Android7.0 分屏下 Activity 与 Fragment 生命周期(一) 和 我们真的了解 Activity 与 Fragment 的生命周期吗?今天继续这个话题,稍稍整理一下,在 Android7.0 分屏情况下,两个 Activity 的生命周期之间的执行顺序,且同样暂不研究横竖屏切换时的过程。 和尚我根据输出的两个 Demo 生命周期简单整理一下交互间的执行顺序。
先从 Service 生命周期看起,Service 的生命周期比较有趣的一点是,它的生命周期会根据调用不同的方法启动有不同的表现,具体有两种形式。
在此之前,我们新建一个项目,代码非常简单,两个活动之间相互跳转(本来想做GIF图的,不会~~~~(>_<)~~~~)
可以看到,启动act2的时候,act1显示失去了屏幕焦点,然后进入onPause;
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
Activity是Android应用程序核心组件中最基本的一个,是用户和程序交互的窗口,一个activity通常对应一个单独的视图,一个APP由一个或者多个activity构成,activity用于显示信息给用户,并且之间可以相互进行跳转,activity之间的跳转有返回值。
Service通常总是称之为“后台服务”,其中“后台”一词是相对于前台而言的,具体是指其本身的运行并不依赖于用户可视的UI界面,因此,从实际业务需求上来理解,Service的适用场景应该具备以下条件:
Service是android 系统中的四大组件之一(Activity、Service、BroadcastReceiver、ContentProvider),它跟Activity的级别差不多,但不能自己运行只能后台运行,并且可以和其他组件进行交互。service可以在很多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务总是藏在后台的。
Service是android 系统中的四大组件之中的一个(Activity、Service、BroadcastReceiver、ContentProvider),它跟Activity的级别差点儿相同,但不能自己执行仅仅能后台执行,而且能够和其它组件进行交互。service能够在非常多场合的应用中使用,比方播放多媒体的时候用户启动了其它Activity这个时候程序要在后台继续播放,比方检測SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务总是藏在后台的。
本文实例分析了Android Activity启动模式之singleTask。分享给大家供大家参考,具体如下:
Android 系统中 Activity 承载了界面组件,负责与用户交互,Service 则在后台“默默运行”,给用户提供“服务”,它不与用户直接交互。如果说 Activity 是剧院的大舞台,是呈现“节目”并且负责和“观众互动”,那么Service 就是这个“舞台”的“幕后”,它为现场的活动做“幕后保障”工作。
Activity 作为 Android 的四大组件之一,其与用户接触的机会最多,所以灵活运用 activity 类能够让我们的程序用户体验感更好。首先我们来看一下 activity 对象的状态图:
1、新建一个Activity,并把各个生命周期打印出来 2、运行Activity,得到如下信息 onCreate--> onStart--> onResume--> 3、按crtl+f12切换成横屏时 onSaveInstanceState--> onPause--> onStop--> onDestroy--> onCreate--> onStart--> onRestoreInstanceState--> onResume--> 4、再按crtl+f12切换成竖屏时,发现打
service就是android系统中的服务,它有这么几个特点:它无法与用户直接进行交互、它必须由用户或者其他程序显式的启动、它的优先级比较高,它比处于 前台的应用优先级低,但是比后台的其他应用优先级高,这就决定了当系统因为缺少内存而销毁某些没被利用的资源时,它被销毁的概率很小哦。 二、那么,什么时候,我们需要使用service呢? 我们知道,service是运行在后台的应用,对于用户来说失去了被关注的焦点。这就跟我们打开了音乐播放之后,便想去看看图片,这时候我们还不想音乐停止,这里就会用到service;又例如,我们打开了一个下载链接之后,我们肯定不想瞪着眼睛等他下载完再去做别的事情,对吧?这时候如果我们想手机一边在后台下载,一边可以让我去看看新闻啥的,就要用到service。 三、service分类: 一般我们认为service分为两类,本地service和远程service。 本地service顾名思义,那就是和当前应用在同一个进程中的service,彼此之间拥有共同的内存区域,所以对于某些数据的共享特别的方便和简单; 远程service:主要牵扯到不同进程间的service访问。因为android的系统安全的原因导致了我们在不同的进程间无法使用一般的方式共享数据。在这里android为我们提供了一个AIDL工具。(android interface description language)android接口描述语言。在后边我们将会对其进行详细的介绍。 四、service生命周期: 和Activity相比,service的生命周期已经简单的不能再简单了,只有onCreate()->onStart()->onDestroy()三个方法。 Activity中和service有关的方法: startService(Intent intent):启动一个service stopService(Intent intent) :停止一个service 如果我们想使用service中的一些数据或者访问其中的一些方法,那么我们就要通过下面的方法: public boolean bindService(Intent intent, ServiceConnection conn, int flags) ; public void unbindService(ServiceConnection conn); intent是跳转到service的intent,如 Intent intent = new Intent(); intent.setClass(this,MyService.class); conn则是一个代表与service连接状态的类,当我们连接service成功或失败时,会主动触发其内部的onServiceConnected或onServiceDisconnected方法。如果我们想要访问service中的数据,可以在onServiceConnected()方法中进行实现,
内存泄漏(Memory Leak):是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
bindService是绑定Service服务,执行service服务中的逻辑流程。
通过上一节“Android系列之四:Android项目的目录结构”我们已经知道了什么是Activity,那么为什么我们创建一个Activity的导出类的时候为什么都要覆盖Activity的onCreate方法呢,为什么会在onPause()方法中保存一些当前Activity中的变化,要弄明白这些就要先了解Activity的生命周期,也就是一个Activity才开始到结束都要经过那些状态,下面通过一个例子了解Activity的声明周期.
onCreate : 创建服务 onStart : 开始服务,Android2.0以下版本使用 onStartCommand : 开始服务,Android2.0及以上版本使用。该函数返回值为整型,一般取值START_STICKY,具体说明如下: 1、START_STICKY:粘性的服务。如果服务进程被杀掉,保留服务的状态为开始状态,但不保留传送的Intent对象。随后系统会尝试重新创建服务,由于服务状态为开始状态,所以创建服务后一定会调用onStartCommand方法。如果在此期间没有任何启动命令送给服务,那么参数Intent将为空值。 2、START_NOT_STICKY:非粘性的服务。使用这个返回值时,如果服务被异常杀掉,系统不会自动重启该服务。 3、START_REDELIVER_INTENT:重传Intent的服务。使用这个返回值时,如果服务被异常杀掉,系统会自动重启该服务,并传入Intent的原值。 4、START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,但不保证服务被杀掉后一定能重启。 onDestroy : 销毁服务 onBind : 绑定服务 onRebind : 重新绑定。该方法只有当onUnbind返回true的时候才会被调用 onUnbind : 解除绑定。返回值true表示希望以后再绑定时能够调用onRebind方法,false表示再绑定时不调用onRebind方法 最简单的服务启动顺序:onCreate->onStartCommand 最简单的服务退出顺序:onDestroy
在之前的文章里我这么写道,结果有不少的小伙伴表示没明白,并问道,什么情况下 onDestroy 不会执行?
官方文档中有详细的文字说明,不过最好还是实践下,熟悉过程。http://developer.android.com/guide/components/fragments.html 一、Activit
Android应用开发:Fragment的非中断保存setRetaineInstance 引言 首先,要明确什么叫“非中断保存”。熟悉Fragment的开发人员都知道,Fragment是依附于Activity的。当Activity销毁时,Fragment会随之销毁。而当Activity配置发生改变(如屏幕旋转)时候,旧的Activity会被销毁,然后重新生成一个新屏幕旋转状态下的Activity,自然而然的Fragment也会随之销毁后重新生成,而新生成的Fragment中的各个对象也与之前的那个Fra
官方的事件函数的执行顺序中有详解(Link:Execution Order of Event Functions)
我学习Android都是结合源代码去学习,这样比较直观,非常清楚的看清效果,觉得很好,今天的学习源码是网上找的个HealthFood 源码 百度搜就知道很多下载的地方
零、前言 [1].两个Fragment,点击左右按钮切换相应的Fragment [2].观察Activity 和两个Fragment生命周期变化 [3].布局很简单,挺多的,就不贴了,会给图
问题描述 在android中,当点击某个rn模块的入口按钮,弹出rn的activity到rn的页面展现出来的过程中,会有很明显的白屏现象,不同的机型不同(cpu好的白屏时间短),大概1s到2s的时间。 注意,只有在真机上才会有此现象,在模拟器上没有此现象完全是秒开。 优化分析 通过工具分析,问题主要在下面的代码上, ReactRootView mReactRootView = createRootView(); mReactRootView.startReactApplication(mReactInst
以上就是Android 滑动退出应用程序的实例,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
(2) 假设Activity2为一个透明的activity activity跳转的生命的周期如下
1 onCreate( )这是必须要写的方法,此方中主要是对activity进行ui的加载
在manifest中声明服务 和activity、content provider一样,服务也必须要在AndroidManifest文件中进行声明是<application>中的子节点。例如我们下面第一个service的例子ServiceDownloader。 <application … … > ... ... <service android:name=".ServiceDownloader"> </application > 命令模式:IntentService
下面是Activity类与生命周期有关的方法: onCreate : 创建页面 onStart : 开始页面 onStop : 停止页面 onResume : 恢复页面 onPause : 暂停页面 onDestroy : 销毁页面 onRestart : 重启页面 onNewIntent : 重用栈中已存在的实例 onSaveInstanceState : 保存实例状态。使用场景:1、从A视图跳转到B视图,需要保存A视图的状态(不考虑特殊情况);2、屏幕从竖屏变为横屏,需要保存竖屏时的视图状态,从横屏变为竖屏亦然;3、当前Activity处于后台,系统因资源紧张将其杀死。 onRestoreInstanceState : 恢复实例状态。使用场景:1、屏幕从竖屏变为横屏,横屏显示时需要恢复之前保存的竖屏状态;2、activity后台运行被系统杀死。此处注意,从B视图返回A视图时并不调用该方法。 最简单的页面启动顺序:onCreate->onStart->onResume 最简单的页面退出顺序:onPause->onStop->onDestroy
Glide这个图片加载框架有个比较好的一点就是图片加载回根据Activity或Fragment生命周期的变化而变化,假如Activity或者Fragment销毁的时候,Glide会停止加载,以节省资源防止内存泄漏。至于Glide内部是怎么实现这个功能,这就是我们这一篇的内容。 首先,我们又来看一下Glide最基础的加载语句:
在AndroidX之前的Fragment , 由于配合ViewPager使用 , 在Fragment添加到ViewPager上后 , 生命周期会跟Activity绑定 , 所以导致Fragment在不可见的时候 , onStart/onResume也会被回调 .
简述:install的时候为application注册Application.ActivityLifecycleCallbacks,然后在onActivityDestroyed为当前activity添加弱引用,手动触发gc,收集日志然后报警与否。
在这些方法里面打印log日志,为了方便查看在filter里面增加一个System.out来过滤
和尚前段时间整理了一篇关于我们真的了解 Activity 与 Fragment 的生命周期吗?的小博文,整理了基础版的关于 Activity 与 Fragment 的生命周期。 后来又一次被一个大大神问到在 Android7.0 分屏情况下的生命周期时,突然蒙圈了,因此和尚我准备分几个小博文整理一下 Android7.0 分屏下各生命周期的执行顺序,Demo 超级简单,只是为了测试生命周期的执行顺序。 和尚我今天整理一下单个 Activity 在 Android7.0 分屏下各生命周期的执行顺序。
android service 的基础知识,生命周期,service分类,运行地点(本地服务,远程服务),运行类型(前台服务,后台服务),功能(可通信与不可通信)。service和Thread的区别。
对于每个GameObject来说,实际调用顺序是OnDisable->OnBecameInvisible->OnDestroy,但是在多个GameObject直接不能保证调用顺序,可能第一个GameObject的OnDestroy已经调用了,另一个的OnDisable才开始调用。所以当多个GameObject调用一个全局变量时,要注意。例如:
本节学习Service的生命周期。 既然Activity有生命周期,那同理Service也有自己的生命周期。
最近有用到Activity需要不断的从Service中获取数据,第一个想法肯定就是通过bind回调机制了,有几点概念模糊特此记录下:
简而言之,通过单例模式把每个Activity 的引用添加到一个全局链表中,每次退出程序调用System.exit(0)时,先调用链表中Activity 的finish方法
领取专属 10元无门槛券
手把手带您无忧上云