编辑: cyhzg | 2019-07-15 |
onStart()―>
onResume(),Activity进入运行状态. Activity退居后台: 当前Activity转到新的Activity界面或按Home键回到主屏: onPause() ―>
onStop(),进入停滞状态. Activity返回前台: onRestart()―>
onStart()―>
onResume(),再次回到运行状态. Activity退居后台,且系统内存不足, 系统会杀死这个后台状态的Activity,若再次回到这 个Activity,则会走onCreate()C>
onStart()―>
onResume() 锁定屏与解锁屏幕 只会调用onPause(),而不会调用onStop方法,开屏后则调用 onResume() Activty被系统杀死如何保存数据恢复数据 主要是两个方法,一个是onSaveInstanceState()和onRestoreInstanceState() 面试
7 Android 当系统调用onSaveInstanceState()的时候,可以把状态存在bundle里面.然后如果重启的 话,oncreate(bundle)参数就不会为空,会收到前面保存的信息.同时 onRestoreInstanceState(bundle)也会调用,也可以在bundle里面恢复数据 onSaveInstanceState()被执行的场景有哪些: 系统不知道你按下HOME后要运行多少其他的程序,自然也不知道activity A是否会被销毁,因 此系统都会调用onSaveInstanceState(),让用户有机会保存某些非永久性的数据.以下几种 情况的分析都遵循该原则 当用户按下HOME键时 长按HOME键,选择运行其他的程序时 锁屏时(注意的生命周期只会调用pause和resume) 从activity A中启动一个新的activity时 屏幕方向切换时 横竖屏切换activty的生命周期 onPause ->
onSaveInstanceState ->
onStop ->
onDestroy ->
onCreate ->
onStart ->
onRestoreInstanceState ->
onResume 不想切换解决办法: 写死横竖屏 menifest配置screenorientation属性 配置configChanges:orientation|screensize|keyboardhidder Fragment生命周期 面试
8 Android 注意和Activity的相比的区别,按照执行顺序 onAttach(),onDetach() onActivityCreated() onCreateView(),onDestroyView() 面试
9 Android Android程序运行时权限和文件系统权限的区 别 运行时权限 Dalvik(Android授权) 文件系统权限(linux 内核授权) Android中内存泄漏 类的静态变量持有大数据对象 静态变量长期维持到大数据对象的引用,阻止垃圾回收. 非静态内部类存在静态实例 非静态内部类会维持一个到外部类实例的引用,如果非静态 内部类的实例是静态的,就会间接长期维持着外部类的引用,阻止被回收掉. 资源对象未关闭 资源性对象比如(Cursor,File文件等)往往都用了一些缓冲,我们在不 使用的时候,应该及时关闭它们, 以便它们的缓冲及时回收内存.它们的缓冲不仅存在 于java虚拟机内,还存在于java虚拟机外. 如果我们仅仅是把它的引用设置为null,而不关 闭它们,往往会造成内存泄露. 解决办法: 比如SQLiteCursor(在析构函数 finalize(),如果我们没有关闭它,它自己会调close()关闭), 如果我们没有关闭它,系 统在回收它时也会关闭它,但是这样的效率太低了. 因此对于资源性对象在不使用的时 候,应该调用它的close()函数,将其关闭掉,然后才置为null. 在我们的程序退出时一定 要确保我们的资源性对象已经关闭. 程序中经常会进行查询数据库的操作,但是经常会 有使用完毕Cursor后没有关闭的情况.如果我们的查询结果集比较小, 对内存的消耗不 容易被发现,只有在常时间大量操作的情况下才会复现内存问题,这样就会给以后的测 试和问题排查带来困难和风险,记得try catch后,在finally方法中关闭连接 Android 3.0 之前的Bitmap需要调用recycle()方法手动回收,因为是放在C堆中 的.Android3.0之后放在Java堆中,GC机制会帮我们处理 Handler内存泄漏 见下面 Handler内存泄漏 发生的原因: 当使用一般的内部类来创建handler的时候.Handler对象会持有Activity的引用. 此 时如果有delayed的Message就会有这样的引用链条. Message queue --->