首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

回收工作好还是不好?在onDestroy()中

回收工作好还是不好?在onDestroy()中

回收工作是指对资源的回收和释放,包括内存、文件、网络连接等。在Android开发中,onDestroy()是Activity生命周期的最后一个回调方法,用于释放Activity所持有的资源。

回收工作的好处:

  1. 节省资源:回收不再使用的资源可以释放内存、文件句柄等,提高系统的资源利用率。
  2. 避免内存泄漏:及时回收资源可以避免因资源未释放而导致的内存泄漏问题,保证应用的稳定性和性能。
  3. 提升用户体验:回收工作可以减少后台资源占用,提高应用的响应速度和流畅度,提升用户体验。

在onDestroy()中进行回收工作的步骤:

  1. 取消网络请求:关闭网络连接、取消未完成的网络请求,避免资源浪费和潜在的安全风险。
  2. 释放资源:释放持有的对象、关闭文件流、释放数据库连接等,确保资源得到正确的释放和回收。
  3. 解除监听器:移除注册的监听器,避免因监听器未解除而导致的内存泄漏。
  4. 停止服务:停止正在运行的服务,释放相关资源。
  5. 清理缓存:清理临时文件、缓存数据等,释放存储空间。

腾讯云相关产品和产品介绍链接地址:

  1. 云服务器(CVM):提供可扩展的计算能力,满足不同规模和需求的应用场景。详情请参考:https://cloud.tencent.com/product/cvm
  2. 云数据库MySQL版(CDB):提供稳定可靠的MySQL数据库服务,支持高可用、备份恢复等功能。详情请参考:https://cloud.tencent.com/product/cdb_mysql
  3. 云存储(COS):提供安全可靠的对象存储服务,适用于图片、音视频、文档等各类数据的存储和访问。详情请参考:https://cloud.tencent.com/product/cos
  4. 人工智能机器翻译(TMT):提供高质量的机器翻译服务,支持多语种翻译和自定义翻译模型。详情请参考:https://cloud.tencent.com/product/tmt
  5. 物联网套件(IoT Suite):提供全面的物联网解决方案,包括设备接入、数据管理、应用开发等功能。详情请参考:https://cloud.tencent.com/product/iot-suite
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

什么是activity的生命周期_activity切换生命周期

处于暂停状态的Activity仍然是完全存活着的,系统也不愿意回收这种Activity(因为它还是可见的,回收可见的东西都会在用户体验方面有不好的影响),只有在内存极低的情况下,系统才会去考虑回收这种Activity...销毁状态 一个Activity从返回栈移除后就变成了销毁状态。系统最倾向于回收处于这种状态的Activity,以保证手机的内存充足。...当活动完全不可见时进行回调。 ● (6)onDestroy()。 这个方法Activity被销毁之前调用,之后Activity的状态将变为销毁状态。 活动销毁之前进行回调。...ActivityonCreate()方法和onDestroy()方法之间所经历的就是完整生存期。...一般情况下,一个Activity会在onCreate()方法完成各种初始化操作,而在onDestroy()方法完成释放内存的操作。 ● (2)可见生存期。

80410

内存泄漏的检测、解决、防止

如果有什么地方写的不好,请谅解,毕竟我还是个孩子!!! 找出内存泄漏与解决 请各位同学打开我们的开发工具(AS),来跟我一起写个内存泄漏的项目(嘻嘻)。不多说,上代码!!!...这张图大家就可以看到了我们的TestLeakedActivity在内存存在了8个实力,那么他是被引用的呢?那好我们点击。 ? ? 点击运行。 ?...才对呀,难道是回收不及时导致的么?...然后截取下内存信息。 ? 哈哈,果然就是没有即使被回收,那么我们说的是对的。上面图片说明了一切。好了既然都找到了内存泄漏的原因,那就去把代码改下喽, ? 这是第一种办法,第二种办法如下: ?...动画也是,及时的停止动画回收资源。 结合WeakReference(弱引用),SoftReferecne(软引用)使用。

1.5K100

Android 系统开发_四大组件篇 -- 探讨 Activity 的生命周期

处于暂停状态的活动仍然是完全存活着的,系统也不愿意去回收这种活动(因为它还是可见的,回收可见的东西都会在用户体验方面有不好的影响,)只有在内存极低的情况下,系统才会去考虑回收这种活动。...你应该在这个方法完成活动的初始化操作,比如加载布局、绑定事件等。 onStart() 这个方法活动由不可见变为可见的时候调用。 onResume() 这个方法活动准备好和用户进行交互的时候调用。...onDestroy() 这个方法活动被销毁之后调用,之后活动的状态将变为销毁状态。 onRestart() 这个方法活动由停止状态变为运行状态之前调用,也就是活动被重新启动了。...完整生存期:活动 onCreate() 方法和 onDestroy() 方法之间所经历的,就是完整生存期。...一般情况下,一个活动会在 onCreate() 方法完成各种初始化操作,而在 onDestroy() 方法种完成释放内存的操作。

41920

一个优秀程序员不可避免的问题:内存泄漏

不好说,如果我们不泄漏Bitmap这种大内存的对象,那么修补内存泄漏就像鸡肋一样,“食之无味,弃之可惜”。...所以内存泄漏足够严重,其危害还是很严重的。 二、实践 对于我们日常开发来说,有比较多的场景稍不注意就会存在内存泄漏的风险。...,也就是说还是要显示的传一个BadActivity我们需要的变量进来…但是这样有造成了同样的泄漏问题。...但发生GC的时候,告诉GC收集器“我”可以被回收。...不过有一点值得注意的,Kotlin的Lambda,如果我们没有使用外部对象的变量或者方法,那么Kotlin在编译时,这个Lambda是不会持有外部对象的引用的。

62740

Android基础部分再学习---activity的生命周期

例如,如果你的活动有一个线程在后台运行下载网络数据,它可以onCreate()创建该线程【一般onStart里面创建更好子线程,主要是onCreate()只有5秒的响应时间】,然后onDestroy...这个问题不好总结,因为不同的应用、不同的Activity所干的事都不一样,有时候我们甚至只需要实现一个onCreate就行了。所以下面所说的,看看即可,不一定符合所有的情况。...3、onStart和onRestart、onStop Activity进入到Stopped状态之后,它极有可能被系统所回收某些极端情况下,系统可能是直接杀死应用程序的进程,而不是调用onDestory...尽管onPauseonStop之前执行,但是onPause只适合做一些轻量级的操作,更多的耗时耗资源的操作还是要放在onStop里面,比如说对数据保存,需要用到的数据库操作。...当然相应的需要在onResume重启或初始化等等。 有时候也需要在onPause判断用户是调用finish结束这个Activity,还是暂时离开,以便区分处理。

84820

AndroidStdio1_5

startActivityForResult()方法接收两个参数,第一个参数还是Intent,第二个参数是请求码,用于之后的回调判断数据的来源。...没错,不过这种情况还是很好处理的,我们可以通过SecondActivity重写onBackPressed()方法来解决这个问题,代码如下所示: ?...处于暂停状态的活动仍然是完全存活着的,系统也不愿意去回收这种活动(因为它还是可见的,回收可见的东西都会在用户体验方面有不好的影响),只有在内存极低的情况下,系统才会去考虑回收这种活动。...活动onCreate()方法和onDestroy()方法之间所经历的,就是完整生存期。...一般情况下,一个活动会在onCreate()方法完成各种初始化操作,而在onDestroy()方法完成释放内存的操作。 ❑ 可见生存期。

60330

Activity入门—Activity生命周期及三种状态+案例

一.运行状态 当activity最前端时,它是可见的,有焦点的,可以用来处理用户的常见的操作。如:点击,双击,长按事件等。系统最不愿回收的就是出于此种状态的活动,这会带来非常差的用户体验。...如果当系统内存不足,其他地方需要内存时,它会被系统回收。...3 onResume( )onstart( )方法后创建 可以与用户进行交互 此时进入activity的第一个状态 Resumed状态即运行状态。...其后调用onResume( ) 案例 通过两个activity的交互进一步理解生命周期各阶段的用法 分别在两个activity调用生命周期方法,观察运行时的输出变化 First Activity:...2继续点击虚拟机的按钮,看到firstactivity调用了onpause方法暂停还是处于可见状态,此时,secondactivity经历前三个方法,完全可交互。

1.7K10

Android开发从GC root分析内存泄漏

编码的时候养成好习惯,像Activity,Fragment等类在生命周期对等的回调方法,最好成对的添加代码。例如在onCreate()方法注册监听之后,马上onDestroy()方法反注册。...这个Activity每次被打开都会多一个对象进程,并且永远不会被回收。 解决办法就是Activity的onDestroy方法中将Timer取消掉。 3....这些对象不止被Java代码的引用持有,也会被虚拟机的底层代码持有。将持有它们的引用设置为null之前,要先将他们close()掉。 还有一个特殊的类是Bitmap。...Android系统3.0之前,它的内存一部分在虚拟机,一部分在虚拟机外。因此它的一部分内存不参与垃圾回收,需要我们主动调用recycler()才能回收。...单例模式能用ApplicationContext的都用ApplicationContext,或者把聚合关系改成依赖关系,不在单例对象持有Context引用; 养成良好的代码习惯。

2K20

笔记13 - Android的内存泄漏如何优化

还有未被执行的任务,此时退出Activity,GC并不会立即回收Handler,而Handler持有外部Activity的引用,这样就会导致Activity无法被回收,还表现为该Activity的onDestroy...上述代码构建了一个BigObject对象,但这个对象并没有被强引用持有,System.gc()之后,该对象就会被回收。...的onDestroy被调用的时候,我们就认为一个Activity处于无用状态可以被回收了,因此我们需要监听每个Activity的onDestroy的调用情况。...可以看到LeakCanary对Activity的onDestroy进行了监听,Activity调用了onDestroy的时候,将这个Activity通知到RefWatcher。...RefWatcher中会将即将被回收的Activity用WeakReference封装,并为它生成一个UUID,记录到retainedKeys,用来保存应该被回收的Activity的记录。

1.3K10

ViewPager2与Fragment

于是 , 配合setOffscreenPageLimit预加载的时候 , 由于早期版本的ViewPager至少需要预加载右侧一个页面 , 所以导致实现懒加载的过程需要通过 : setUserVisibleHint...: 当Fragment显示/不可见的时候会回调显示状态(isVisible) onResume : 该回调判断当前Fragment是否可见 , 如果可见的话 , 进行懒加载 只有通过以上两个方法来进行懒加载...ViewPager2与Fragment配合使用 ViewPager2 , 官方将Fragment的生命周期纠正了 , 可以随着ViewPager2的左右切换来回调Fragment当前的状态....向右再翻五页(即展示Fragment6) 当页面缓存超过7个时 , 会将最后使用的Fragment销毁回收 优先创建操作 , 然后再进行回收 , 最后进行展示 // 创建3 E/CardFragmentTag...f7后 , 会回收f0 E/CardFragmentTag: onStop:f0 E/CardFragmentTag: onDestroyView:f0 E/CardFragmentTag: onDestroy

2.5K20

程序员面试的真正核心点是.....

今天老九君与你一同探讨,为何面试你的性格会大过经验 、基础 、算法的考量。...从“基础好”,“算法好”等可以直接观测的量去推测“工作好”的概率,这就是一个“X好”条件下“工作好”的条件概率问题。 ?...性格 性格是一个复杂的东西,它包含了很多的方面,可以重点考察这些方面: 1、态度积极还是消极。 2、语言表达能力。 3、是否具有用户意识。 4、个性特点,并判断其是否有益于团队。...总结 1、面试官的目标是找到“工作好”的人,一定要围绕这个目标来进行面试; 2、面试过程是通过学历、性格、基础、经验、算法等可以测试的因素去综合判断面试者“工作好”的概率; 3、各种因素,性格 >...性格是最重要的,如果性格不好,所有技术能力都会大打折扣,而且技术缺陷容易弥补,性格缺陷很难改变。

86560

Android应用开发:屏幕旋转时的非中断保存之setRetaineInstance

生命周期 Activity的生命周期配置发生改变时: onPuase->onStop->onDestroy->onStart->onResume 比如在Activity中发生屏幕旋转,其生命周期就是如此...而在onDestroy,Activity会将其FragmentManager所包含的Fragment都销毁掉(默认状态),即Fragment的生命周期为: onDestroyView->onDestroy...同样,Android文档对这两个接口也有了一定的描述。 总结 这里结合Fragment.javasetRetainInstance的注释进行一下Fragment非中断保存的总结。...和onActivityCreated还是会被调用。...需要注意的是,要使用这种操作的Fragment不能加入backstack后退栈。并且,被保存的Fragment实例不会保持太久,若长时间没有容器承载它,也会被系统回收掉的。

74920

看完这篇文章,解决 APP 90 % 的内存异常问题

Android 我们写的 .java 文件,最终会编译成 .class 文件, class 又由类装载器加载后, JVM 中会形成一份描述 class 结构的元信息对象,通过该元信息对象可以知道...不能满足被回收的条件,尽管调用 System.gc() 也还是不能得到回收, 这就造成了 内存泄漏 。当然,现在虚拟机基本上都不采用此方式。 可达性分析算法 ?... onStrongReference() 内部有一个强引用,这个引用保存在 java 栈 ,而真正的引用内容 (Object)保存在 java 堆。...垃圾回收器线程扫描它所管辖的内存区域的过程,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。... AS 项目以 profile 运行 ? 2. MEMORY 界面中选择要分析的一段内存,右键 export ?

72230

EventBus : No subscribers registered for event class

EventBus不适合向一个不存在于activity栈的activity发送消息,这样是失败的, 例如: 情况1:一个activity 还没有生成,就post,肯定报这样的错; 情况2:一个activity...Override public void onStop() { super.onStop(); EventBus.getDefault().unregister(this); } 而实际上这样不好...().register(this); } @Override protected void onDestroy() { super.onDestroy(); EventBus.getDefault...().unregister(this); } 原因应该是:EventBus 是为已经存在的activity传递消息,而且订阅者必须要注册且不能被注销了, 如果你onStop里面注销了,栈虽然有这个activity...所以有时候最好还是用标准的方法去传递相关的数据,比如bundle,intent里面带过去

3.3K30
领券