前言
开启Android复习生涯,真的是所有东西忘得一滴不剩。
一、Android四大组件?
Android系统四大组件分别是活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)和内容提供器(Content Provider)
- 活动可以看成是安卓系统的根本,在这个根本上才可以进行其他的工作,因为在安卓系统里运行的所有的程序,它的流程都必须在【活动】中运行,所有他是最基本的模块。它的作用是一个框架或页面,每个程序会有多个【活动】组成。
- 而服务就比较低调了,你无法看到它,但它会一直在后台默默地运行,即使用户退出了应用,服务仍然是可以继续运行的。它的作用就是与安卓的其他逐渐进行交互,举个简单例子:当我们打开手机上音乐播放器并将它放到后台,此时播放的音乐就是由Service在负责控制。
- 广播接收器可以允许你的应用接收来自各处的广播消息,比如电话、短信等,当然你的应用同样也可以向外发出广播消息。
- 内容提供器则为应用程序之间共享数据提供了可能,比如你想要读取系统电话簿中的联系人,就需要通过内容提供器来实现。
注意:使用之前,我们需要在Android manifest.xml中先注册,然后才可以开始使用它的各种组件。
二、安卓的日志工具Log
- Log.v()
这个方法用于打印那些最为琐碎的,意义最小的日志信息。对应级别 verbose,是Android 日志里面级别最低的一种。 - Log.d()
这个方法用于打印一些调试信息,这些信息对你调试程序和分析问题应该是有帮助的。对应级别 debug,比 verbose 高一级。 - Log.i()
这个方法用于打印一些比较重要的数据,这些数据应该是你非常想看到的,可以帮你分析用户行为的那种。对应级别 info,比 debug 高一级。 - Log.w()
这个方法用于打印一些警告信息,提示程序在这个地方可能会有潜在的风险,最好去修复一下这些出现警告的地方。对应级别 warn,比 info 高一级。 - Log.e()
这个方法用于打印程序中的错误信息,比如程序进入到了 catch 语句当中。当有错误信息打印出来的时候,一般都代表你的程序出现严重问题了,必须尽快修复。对应级别 error,比 warn 高一级。
三、为什么使用 Log 而不使用 System.out
- 在 LogCat 中是可以很轻松地添加过滤器的,还可以自定义过滤器
- 日志级别控制的好处就是,你可以很快地找到你所关心的那些日志。相信如果让你从上千行日志中查找一条崩溃信息,你一定会抓狂的吧。而现在你只需要将日志级别选中为 error,那些不相干的琐碎信息就不会再干扰你的视线了。
四、Intent
- Intent 是 Android 程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。Intent 一般可被用于启动活动、启动服务、以及发送广播等场景。
比如我们已经设置了主活动,还行在设置一个活动,这时可以使用Intent将两个活动绑定在一起(注意:在创建活动之后,都要在AndroidManifest.xml中进行设置)
Intent分为显式 Intent 和隐式 Intent。
- 显式 Intent使用如下例。
- 相比于显式 Intent,隐式 Intent 则含蓄了许多,它并不明确指出我们想要启动哪一个活动,而是指定了一系列更为抽象的 action和 category 等信息,然后交由系统去分析这个 Intent,并帮我们找出合适的活动去启动。
先配置intent-filter的内容,在action标签中我们指明了当前活动可以响应 com.example.activitytest.ACTION_
START 这个 action,而category标签则包含了一些附加信息,更精确地指明了当前的活动能够响应的 Intent 中还可能带有的 category。
- 比如向另一个活动传递数据,返回数据给上一个活动,都可以使用Intent(有点像分布式中学过的中间件了)
五、活动的生命周期
活动更多的处于四个状态。
-
1、运行状态:当一个活动位于返回栈的栈顶时,这时活动就处于运行状态。
-
2、暂停状态:当一个活动不再处于栈顶位置,但仍然可见时,这时活动就进入了暂停状态。
-
3、停止状态:当一个活动不再处于栈顶位置,并且完全不可见的时候,就进入了停止状态。
-
4、销毁状态:当一个活动从返回栈中移除后就变成了销毁状态。
-
(1)onCreate()
这个方法已经看到过很多次了,每个活动中我们都重写了这个方法,它会在活动第一次被创建的时候调用。你应该在这个方法中完成活动的初始化操作,比如说加载布局、绑定事件等。 -
(2)onStart()
这个方法在活动由不可见变为可见的时候调用。 -
(3)onResume()
这个方法在活动准备好和用户进行交互的时候调用。此时的活动一定位于返回栈的栈顶,并且处于运行状态。
比如做一个音乐播放程序,在播放过程中,突然有电话打进来了,这时系统自动调出电话,而你的音乐播放程序置于后台,触发了onPause方法。当你电话结束后,关闭电话,又自动回到音乐播放程序,此时,触发onResume方法,这时,如果你之前在onPause的时候记录了播放点,就可以在onResume方法里来继续播放。 -
(4)onPause()
这个方法在系统准备去启动或者恢复另一个活动的时候调用(由一个Activity转到另一个Activity)。我们通常会在这个方法中将一些消耗 CPU 的资源释放掉,以及保存一些关键数据,但这个方法的执行速度一定要快,不然会影响到新的栈顶活动的使用。 -
(5)onStop()
这个方法在活动完全不可见的时候调用。它和 onPause()方法的主要区别在于,如果启动的新活动是一个对话框式的活动,那么 onPause()方法会得到执行,而 onStop()方法并不会执行。 -
(6)onDestroy()
这个方法在活动被销毁之前调用,之后活动的状态将变为销毁状态。 -
(7)onRestart()
这个方法在活动由停止状态变为运行状态之前调用,也就是活动被重新启动了。
举例子
1、启动一个A Activity:分别执行onCreate()、onStart()、onResume()方法。
2、从A Activity跳转到B Activity
分别执行A onPause()、B onCreate()、B onStart()、B onResume()、A onStop()方法。
3、关闭B Activity
分别执行B onPause()、A onRestart()、A onStart()、A onResume()、B onStop()、B onDestroy()方法。
六、活动的启动模式
- Standard 标准模式
这是android的默认启动方式,即使不在AndroidManifest.xml里面设置launchMode,也是默认的这个模式。每次启动一个A activity都会创建一个A activity的实例入栈,无论A activity是否存在。
举个例子:任务栈中有A、B、C三个activity,此时C处于栈顶,C的启动模式为Standard。若C跳转到 C;结果还会有一个C activity进入栈中,成为栈顶。 - SingleTop栈顶复用模式
此模式分为2中情况:(1)如果需要创建的activity已经位于栈顶,此时直接复用该栈顶activity,不再创建新的activity;(2)如果要创建的activity不处于栈顶,此时才会创建一个新的activity入栈,同Standard一样。
举个栗子:activity栈中有三个activity,分别是A、B、C。C处于栈顶,且为SingleTop模式。(1)情况1,C中加入点击 - SingleTask栈内复用模式
如果创建的A activity已经处于栈中,此时不会创建新的Activity,而是会将A activity上面的其他activity摧毁,使得A成为栈顶。
举个栗子:此时有A、B、C三个activity,C位于栈顶,启动模式为SingleTask。(1)情况一,C中加入点击事件,跳转到C,此时直接复用栈顶的C Activity。(2)情况二,C跳到A ,会将A之上的所有activity销毁,使A成为 栈顶。 - SingleInstance单实例模式
全局单例模式,加强版的SingleTask模式。具有所有SingleTask的特性,除此之外,改模式的activity仅仅能单独位于一个任务栈中,这个经常应用于系统的应用中,如,锁屏,Launch等等,整个系统中仅仅有一个。
总结
这些内容面试会经常被问到的,可以参考一下。