androidondestroy
㈠ android调用finish后为什么没有立即执行onDestroy方法
当你在程序中调用 Activity.finish()方法时,结果和用户按下 BACK 键一样:他告诉 Activity Manager该Activity实例可以被“回收”。随后 Activity Manager 激活处于栈第二层的 Activity 并重 新入栈,把原 Activity 压入到栈的第二层,从 Running 状态转到 Paused 状态。 查看原帖>>
㈡ Android开发中的finish()与onDestroy()方法都是用来结束activity的吧两个有什么区别
Android开发中的finish()与onDestroy()方法都是用来结束activity的。
1、不同点区别:
finish()方法用于结束一个Activity的生命周期。而onDestory()方法则是Activity的一个生命周期。
其作用是在一个Activity对象被销毁之前,Android系统会调用该方法,用于释放此Activity之前所占用的资源。finish会调用到onDestory方法。在onDestory里打印一句话,运行一下程序,会发现finish方法会把那句话打印出来。
2、方法区别:
Activity.finish()方法:
在你的activity动作完成的时候,或者Activity需要关闭的时候,调用此方法,当你调用此方法的时候,系统只是将最上面的Activity移出了栈,并没有及时的调用onDestory()方法,其占用的资源也没有被及时释放。因为移出了栈,所以当你点击手机上边的“back” 按键的时候,也不会再找到这个Activity.
Acitvity.onDestory()方法:
系统销毁了这个Activity的实例在内存中占据的空间。在Activity的生命周期中,onDestory()方法是他声明的最后一步,资源控件等就被回收了。当重新进入此Activity的时候,必须重新创建,执行onCrate()方法。
(2)androidondestroy扩展阅读
中介软件
1、操作系统与应用程序的沟通桥梁,应用分为两层:函数层(Library)和虚拟机(Virtual Machine)。 Bionic是 Android 改良libc的版本。Android 同时包含了Webkit,所谓的Webkit 就是Apple Safari 浏览器背后的引擎。Surface flinger 是就2D或3D的内容显示到屏幕上。Android使用工具链(Toolchain)为Google自制的Bionic Libc。
2、Android采用OpenCORE作为基础多媒体框架。Open CORE可分7大块:PVPlayer、PVAuthor、Codec、PacketVideo Multimedia Framework(PVMF)、Operating System Compatibility Library(OSCL)、Common、OpenMAX。
3、Android 使用skia 为核心图形引擎,搭配OpenGL/ES。skia与Linux Cairo功能相当,但相较于Linux Cairo, skia 功能还只是雏形的。2005年Skia公司被Google收购,2007年初,Skia GL源码被公开,Skia 也是Google Chrome 的图形引擎。
4、Android的多媒体数据库采用SQLite数据库系统。数据库又分为共用数据库及私用数据库。用户可通过ContentResolver类(Column)取得共用数据库。
5、Android的中间层多以Java 实现,并且采用特殊的Dalvik 虚拟机(Dalvik Virtual Machine)。Dalvik虚拟机是一种“暂存器型态”(Register Based)的Java虚拟机,变量皆存放于暂存器中,虚拟机的指令相对减少。
6、Dalvik虚拟机可以有多个实例(Instance), 每个Android应用程序都用一个自属的Dalvik虚拟机来运行,让系统在运行程序时可达到优化。Dalvik 虚拟机并非运行Java字节码(Bytecode),而是运行一种称为.dex格式的文件。
㈢ android调用finish后为什么没有立即执行onDestroy方法
调用finish()方法,系统只是将最上面的Activity移出了栈,并没有及时的调用onDestory()方法,其占用的资源也没有被及时释放。也就是说,系统自己决定何时从内存中释放应用程序,而不是finish()之后立即销毁。
㈣ android开发中ondestroy要销毁哪些东西
绑定的服务、动态注册的广播、耗费资源的组件比如MediaPlayer、改变控制循环的标识等等
㈤ android调用finish后为什么没有立即执行onDestroy方法
他们是俩个不同的东西啊,在自己的activity动作完成的时候,或者Activity需要关闭的时候,调用此方法。当调用此方法的时候,系统只是将最上面的Activity移出了栈,并没有及时的调用onDestory()方法,其占用的资源也没有被及时释放。因为移出了栈,所以当自己点击手机上面的“back”按键的时候,也不会再找到这个。ondestroy()是系统销毁了这个Activity的实例在内存中占据的空间。
㈥ Android开发,现在的手机后退键并不是真正结束程序,所有就导致Activity的onDestroy()方法无法调用,咋办
想要用后退键退出程序
可以设置一个List<Activity>,每次antivity创建时,加到这个list中,按返回键时,遍历这个list,把list中的每个acivity用finish()方法结束
㈦ android 为什么 onDestroy() 会在 onResume()之后执行
简单点说,在创建Activity中需要执行至onResume()方法后,这个Activity才创建完毕运行,进入runing状态,你从activityA跳到activityB,涉及到一个单线程调用链,实际startActivity需要执行完毕以后,前Activity才能执行下一个方法,不管你是finish还是其他逻辑。就好比一个队列呗,上一个方法还没执行完,下一个方法得先排队。
㈧ Android activity什么时候调用onDestroy这个方法,求大神给解释下,
当你结束并关闭一个Activity的时候就会调用到onDestroy这个方法。
这是在Activity生命周期里的,你可以看看整个Activity的生命周期以及涉及到的方法。
㈨ android ondestroy 什么时候调用
activity 实现了一个回调接口,然后使用 this 设置给需要回调接口的方法,这种应用场景比较常见,最常见的就是实现 onClickListener 接口,然后 findViewById().setOnClickListenr(this)
如果,这个回调接口设置到了一个静态对象(单例模式),当 activity finish() 的时候(按返回键,回到桌面),则activity 不会被调用 onDestroy() ,原因可能是 activity 对象还在被引用!
此时你再点击图标回到应用,onCreate() 再次调用!
很明显,如果你把资源释放放在了 onDestroy() 里面,就会导致内存泄露!
那有没有解决办法呢?有的
你可以在 onPause() 方法里面判断 isFinishing() ,正常调用 finish() 后 activity 的回调过程是 onPause、onStop、onDestroy ,倘若出现上面的情况,只到 onPause!但是 isFinishing() 标志还是为 true !你可以释放资源了。
㈩ android activity 怎么不让它执行onDestroy 每次执行完onpause都会自动执行ondestroy 这样无法再次启动了
不是每次执行完onPause,就执行onDestroy的吧。onPause是不与用户交互了,就是不能处理输入了。只有当退出activity的时候才会执行onDestory。