Android基础知识

一、Activity是什么?
Activity就是与用户交互的接口。

二、任务栈
Android系统是通过Activity栈的形式来管理Activity的。

三、Activity的四种形态
屏幕快照 2018-09-20 下午4.19.34.png

Active:Activity处于栈顶、可见、可与用户交互
Paused:可见但不可交互

Stopped:不可见
Killed:系统回收掉
其中,Paused和Stopped有一个相同点,在内存足够的情况下,它的状态、数据、成员变量都存在,反之都会被系统回收掉。

四、Activity的生命周期

1、正常情况下
屏幕快照 2018-09-20 下午3.45.48.png

2、异常情况下

异常情况主要有两种方式导致的:
第一:系统配置导致改变
第二:内存不足导致改变

异常情况下多调用了两个方法:onSaveInstanceState()和onRestoreInstanceState()
onSaveInstanceState()方法在应用异常销毁时调用,并将数据存在Bundle中,作为参数传递给onRestoreInstanceState()和onCreate();
onRestoreInstanceState()方法在应用发生异常后重启时调用,并从传过来的参数Bundle中恢复数据;
需要注意的一点,在数据恢复时onRestoreInstanceState()和onCreate()方法的区别:在onRestoreInstanceState()方法当中,一旦被系统调用了,它里面传入的参数Bundle 一定不为null,所以没有必要进行非空判断;而onCreate()这个方法中Bundle有可能为null,所以要进行非空判断。因此还是用系统给我们提供的onRestoreInstanceState()方法来进行数据恢复。

3、总结
(1)、Activity正常启动:onCreate-onStart-onResume
(2)、点击back回退:onPause-onStop-onDestory
(3)、打开新的Activity:onPause-onStop
(4)、Activity异常:onSaveInstanceState来保存数据
(5)、Activity重新创建:调用onRestoreInstanceState

五、Activity之间数据通信3种方式
1、Intent/Bundle

(1)通过bundle发送数据
屏幕快照 2018-09-20 下午5.04.56.png

(2)通过bundle获取数据
屏幕快照 2018-09-20 下午5.08.05.png

2、类静态变量
3、全局变量

六、Activity与Fragment之间传递数据
1、Activity向Fragment传递数据:Bundle/定义方法
(1)Bundle

Activity发送数据
屏幕快照 2018-09-20 下午5.16.19.png

Fragment接收数据
屏幕快照 2018-09-20 下午5.19.16.png

(2)直接在Activity中定义方法

Activity中
屏幕快照 2018-09-20 下午5.24.05.png

Fragment中
屏幕快照 2018-09-20 下午5.27.02.png

2、Fragment传递数据给Activity:接口回调
(1)在fragment中定义一个内部回调接口
(2)fragment的方法onAttach()
(3)调用onDetach方法,这个时候要把传递进来的activity对象释放掉


屏幕快照 2018-09-20 下午6.31.49.png

屏幕快照 2018-09-20 下午6.31.40.png

七、Activity与Service通信
1、绑定服务,利用ServiceConnection类

2、简单通信,利用Intent进行传值
3、定一个callback接口来监听服务中的进程的变化

八、Activity启动模式
1、标准Standard模式
(1)在不指定启动模式的前提下,系统默认使用该模式启动Activity
(2)每次启动一个Activity都会重写创建一个新的实例
(3)Activity它的onCreate(),onStart(),onResume()方法
2、SingleTop
(1)当前栈中已有该Activity的实例并且该实例位于栈顶时,不会创建实例
(2)当前栈中已有该Activity的实例但是该实例不在栈顶时,会创建新的实例
(3)当前栈中不存在该Activity的实例时,会创建新的实例
应用场景:
(1)IM对话框
(2)新闻客户端推送
3、SingleTask
(1)首先会根据taskAffinity去寻找当前是否存在一个对应名字的任务栈
TaskAffinity:任务相关性
(2)如果不存在,则会创建一个新的Task
(3)如果存在,则得到该任务栈,查找该任务栈中是否存在该Activity实例
应用场景:应用到主界面
4、SingleInstance
(1)以SingleInstance模式启动的Activity具有全局唯一性
(2)如果在启动这样的Activity时,已经存在了一个实例
(3)以SingleInstance模式启动的Activity具有独占性
应用场景:呼叫来电

九、Service
1、service和线程的区别和场景
Thread:程序执行的最小单元,它是分配CPU的基本单位
Thread的生命周期:
新建
就绪
运行
死亡
阻塞
Thread的致命缺点:无法控制
场景:Thread需要连续不停地每隔一段时间就要连接服务器一次做某种同步
Service:是Android的一种机制,服务是运行在主线程上的

2、如何管理service生命周期
屏幕快照 2018-09-21 上午8.51.49.png

3、service和IntentService的区别
(1)不建议在Service中编写耗时的逻辑和操作,否则会引起ANR
(2)内部有一个工作线程HandlerThread来处理耗时操作
IntentService工作机制:
(1)IntentService是集成并处理异步请求的一个类
(2)内有一个工作线程来处理耗时操作
(3)IntentService内部则是通过消息的方式发送给HandlerThread的,然后由Handler中的Looper来处理消息
4、启动服务和绑定服务先后次序问题
(1)先绑定服务后启动服务
(2)先启动服务后绑定服务
5、序列化:Parcelable和Serializable
(1)定义:
序列化就是将内存中对象写到磁盘。
反序列化就是将磁盘中对象写到内存中。
(2)实现
Serializable:直接实现Serializable接口。在这个类中生成一个序列号标识serialVersionUID,这个序列号的作用是辅助序列化和反序列的
Parcelable:性能上要比Serializable好,首先在writeToParcel方法中将我们的对象映射成Parcable对象,然后在createFromParcel方法中,再映射成我们的对象。
(3)总结
两者实现差异
两者效率对比

十、Binder
1、AIDL
(1)定义:进程间通信(IPC)机制
(2)创建AIDL:实体对象、新建AIDL文件、make工程
(3)服务端:新建Service、创建Binder对象、定义方法
(4)客户端:实现serviceConnection、BindService
2、AIDL生成java文件详细分析

十一、广播静态、动态注册使用、特点、应用场景


屏幕快照 2018-09-21 上午10.22.06.png

1、静态注册

在manifest中添加代码
屏幕快照 2018-09-21 上午10.21.07.png

2、动态注册
在onResume中注册广播,在onPause中注销广播
屏幕快照 2018-09-21 上午10.23.30.png
屏幕快照 2018-09-21 上午10.24.37.png

3、广播特点
(1)自动回调onReceive()方法
(2)广播接收器运行在UI线程
4、静态注册和动态注册的区别
(1)使用方式
静态:在AndroidManifest.xml里通过标签声明
动态:在代码中调用Context.registerReceiver
(2)特点
静态:常驻进程中,不受组件生命周期影响
动态:跟随组件的生命周期变化
(3)应用场景
静态:需要时刻监听广播
动态:需要在特定时刻接受广播

你可能感兴趣的:(Android基础知识)