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里通过<receiver>标签声明
动态:在代码中调用Context.registerReceiver
(2)特点
静态:常驻进程中,不受组件生命周期影响
动态:跟随组件的生命周期变化
(3)应用场景
静态:需要时刻监听广播
动态:需要在特定时刻接受广播

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,843评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,538评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,187评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,264评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,289评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,231评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,116评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,945评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,367评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,581评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,754评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,458评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,068评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,692评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,842评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,797评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,654评论 2 354

推荐阅读更多精彩内容

  • 此章节参考Android官网内容而编写,如有遗漏,后面会慢慢补上。 一、Activity是什么? Activity...
    __帝华阅读 183评论 0 0
  • 一. Activity生命周期 简单说明一下Activity每个生命周期函数: onCreate(): 表示Act...
    liys_android阅读 570评论 0 1
  • 启动与销毁Activity 不同于使用 main() 方法启动应用的其他编程范例,Android 系统会通过调用对...
    安卓Boy阅读 1,775评论 3 5
  • ཨང་རྟགས། མིང་ཐོ། ༼༡༽.............སེམས་པ་དཀར་པོ།...
    garTsegyal阅读 177评论 0 0
  • 知道何苦,知道《最后的棒棒》,是缘于三天前在微信上的匆匆一瞥。有几个词打动了我:转业干部、卧底13个月、豆瓣评分9...
    舒七七阅读 879评论 0 3