写点什么

Android 之内存泄漏调试学习与总结,面试总结

用户头像
极客开源
关注
发布于: 刚刚

1、四大组件是什么?

  • Activity【活动】:用于表现功能。

  • Service【服务】:后台运行服务,不提供界面呈现。

  • BroadcastReceiver【广播接收器】:用来接收广播。

  • Content Provider【内容提供商】:支持在多个应用中存储和读取数据,相当于数据库。

2、四个组件的生命周期?

Activity 生命周期图及?Fragment 生命周期图? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

Service 的生命周期:首先 Service 有两种启动方式,而在这两种启动方式下,它的生命周期不同。

通过 startService()方法启动的服务

??????初始化结束后系统会调用 void onStart(Intent intent)?方法,用于处理传递给 startService()的 Intent 对象。如音乐服务会打开 Intent 来探明将要播放哪首音乐,并开始播放。注意:多次调用 startService()方法会多次触发 onStart()方法。

通过 bindService ()方法启动的服务

??????初始化结束后系统会调用 IBinder onBind(Intent intent)?方法,用来绑定传递给 bindService 的 Intent 的对象。注意:多次调用 bindService()时,如果该服务已启动则不会再触发此方法。

3、Activity 的四种启动模式对比?

  • Standard:标准的启动模式,如果需要启动一个 activity 就会创建该 activity 的实例。也是 activity 的默认启动模式。

  • SingeTop:如果启动的 activity 已经位于栈顶,那么就不会重新创建一个新的 activity 实例。而是复用位于栈顶的 activity 实例对象。如果不位于栈顶仍旧会重新创建 activity 的实例对象。

  • SingleTask:设置了 singleTask 启动模式的 activity 在启动时,如果位于 activity 栈中,就会复用该 activity,这样的话,在该实例之上的所有 activity 都依次进行出栈操作,即执行对应的 onDestroy()方法,直到当前要启动的 activity 位于栈顶。一般应用在网页的图集,一键退出当前的应用程序。

  • singleInstance:如果使用 singleInstance 启动模式的 activity 在启动的时候会复用已经存在的 activity 实例。不管这个 activity 的实例是位于哪一个应用当中,都会共享已经启动的 activity 的实例对象。使用了 singlestance 的启动模式的 activity 会单独的开启一个共享栈,这个栈中只存在当前的 activity 实例对象。

4、Activity 在有 Dialog 时按 Home 键的生命周期?

当我们的 Activity 上弹出 Dialog 对话框时,程序的生命周期依然是 onCreate() ---> onStart() ---> onResume(),在弹出 Dialog 的时候并没有 onPause()和 onStop()方法。而在此时我们按下 Home 键,才会继续执行 onPause()和 onStop()方法。这说明对话框并没有使 Activity 进入后台,而是在点击了 Home 键后 Activity 才进入后台工作。

原因就是,其实 Dialog 是 Activity 的一个组件,此时 Activity 并不是不可见,而是被 Dialog 组件覆盖了其他的组件,此时我们无法对其他组件进行操作而已。

5、两个 Activity 之间跳转时必然会执行的是哪几个方法??

首先定义两个 Activity,分别为 A 和 B。

当我们在 A 中激活 B 时,A 调用 onPause()方法,此时 B 出现在屏幕时,B 调用 onCreate()、onStart()、onResume()。

这个时候 B【B 不是一个透明的窗体或对话框的形式】已经覆盖了 A 的窗体,A 会调用 onStop()方法。


结尾

最后,针对上面谈的内容,给大家推荐一个 Android 资料,应该对大家有用。


首先是一个知识清单:(对于现在的 Android 及移动互联网来说,我们需要掌握的技术)


泛型原理丶反射原理丶 Java 虚拟机原理丶线程池原理丶注解原理丶注解原理丶序列化 Activity 知识体系(Activity 的生命周期丶 Activity 的任务栈丶 Activity 的启动模式丶 View 源码丶 Fragment 内核相关丶 service 原理等)代码框架结构优化(数据结构丶排序算法丶设计模式)APP 性能优化(用户体验优化丶适配丶代码调优)热修复丶热升级丶 Hook 技术丶 IOC 架构设计 NDK(c 编程丶 C++丶 JNI 丶 LINUX)如何提高开发效率?MVC 丶 MVP 丶 MVVM 微信小程序 HybridFlutter



接下来是资料清单:(敲黑板!!!




1.数据结构和算法



2.设计模式



3.全套体系化高级架构视频;七大主流技术模块,视频+源码+笔记



4.面试专题资料包(怎么能少了一份全面的面试题总结呢~)



不论遇到什么困难,都不应该成为我们放弃的理由!共勉~


如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。



本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

用户头像

极客开源

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
Android之内存泄漏调试学习与总结,面试总结