请注意,本文编写于 2218 天前,最后修改于 2218 天前,其中某些信息可能已经过时。
四大组件是什么
Activity 活动、Service 服务、Broadcast Receiver 广播接收器、Content Provider内容提供器
四大组件的生命周期和简单用法
活动
生命周期:启动activity:系统先调用onCreate(),然后调用onStart(),最后调用onResume()方法,activity进入运行状态。
简单用法:活动的跳转
服务
一个Service 是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序。
启动服务:Contex.startService()或Contex.bindService()启动服务
广播接收器
对外部事件进行过滤,只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。
https://www.jianshu.com/p/51aaa65d5d25
内容提供器
它主要的作用就是将程序的内部的数据和外部进行共享,为数据提供外部访问接口。
Android 五大组件
Android 五大布局: FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)。
Activity之间的通信方式
- Intent
- Broadcast
- 数据存储
- 静态变量
Activity各种情况下的生命周期
Activity的四种启动模式对比
- standard,每新建一个活动,都会新建一个实例
- singleTop,每次扫描栈顶,如果在任务栈顶发现了相同的实例则重用,否则新建并压入栈顶。
- singleTask,会扫描整个任务栈,发现了相同的实例则重用,否则新建并压入栈顶。
- singleInstance,该模式具备singleTask模式的所有特性外,并且该实例整个系统中就这么一个实例
https://hit-alibaba.github.io/interview/Android/basic/Android-LaunchMode.html
Activity 怎么和Service 绑定?
怎么在Activity 中启动自己对应的Service?
service和activity怎么进行数据交互?
Service的开启方式
- start方式
1.定义一个类继承Service
2.在Manifest.xml
文件中配置该Service
3.使用Context的startService(Intent)
方法启动该Service
4.不再使用时,调用stopService(Intent)
方法停止该服务
https://www.jianshu.com/p/2fb6eb14fdec
- bind方式绑定activity
1.定义一个类继承Service
2.在Manifest.xml
文件中配置该Service
3.使用Contex
t的bindService(Intent, ServiceConnection, int)
方法启动该Service
4.不再使用时,调用unbindService(ServiceConnection)
方法停止该服务
请描述一下Service 的生命周期
https://blog.csdn.net/carson_ho/article/details/53160137
onCreat() | 创建服务 |
---|---|
onStartCommand() | 开始服务 |
onDestroy() | 销毁服务 |
onBind() | 绑定服务 |
onUnbind() | 解绑服务 |
谈谈你对ContentProvider的理解
https://www.jianshu.com/p/f5ec75a9cfea
说说ContentProvider、ContentResolver、ContentObserver 之间的关系
请描述一下广播BroadcastReceiver的理解
广播的分类
广播被分为两种不同的类型:
- 普通广播(Normal broadcasts)普通广播是完全异步的,可以在同一时刻(逻辑上)被所有接收者接收到,消息传递的效率比较高,但缺点是:接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播;
- 有序广播(Ordered broadcasts)有序广播是按照接收者声明的优先级别(声明在intent-filter元素的android:priority属性中,数越大优先级别越高,取值范围:-1000到1000。也可以调用IntentFilter对象的setPriority()进行设置),被接收者依次接收广播。
广播使用的方式和场景
在manifest 和代码中如何注册和使用BroadcastReceiver?
4大基本组件都需要注册才能使用,每个Activity、service、Content Provider都需要在AndroidManifest文件中进行配置。AndroidManifest文件中未进行声明的activity、服务以及内容提供者将不为系统所见,从而也就不可用。
broadcast receiver广播接收者的注册:
- 静态注册(在AndroidManifest文件中进行配置),会随系统的启动而一直处于活跃状态
- 通过代码动态创建并以调用Context.registerReceiver()的方式注册至系统。
- 制作intent(可以携带参数)
- 使用sendBroadcast()传入intent;
- 制作广播接收器类继承BroadcastReceiver重写onReceive方法(或者可以匿名内部类啥的)
- 在java中(动态注册)或者直接在Manifest中注册广播接收器(静态注册)使用registerReceiver()传入接收器和intentFilter
- 取消注册可以在OnDestroy()函数中,unregisterReceiver()传入接收器
本地广播和全局广播有什么差别?
- BroadcastReceiver用于应用之间的传递消息;
- LocalBroadcastManager用于应用内部传递消息,比broadcastReceiver更加高效。
Application 和 Activity 的 Context 对象的区别
- 第一种中context的生命周期与Application的生命周期相关的,context随着Application的销毁而销毁,伴随application的一生
- 第二种中的context跟Activity的生命周期是相关的
Android中数据存储方式
- 文件存储
- SharedPreferences
- SQLite数据库存储
- ContentProvider
- 网络存储