Android知识点

自己用来记录的,不是很完整,有需要可参考

一、四大组件

1、Activity

(1)生命周期

onCreate()->onStart()->onResume()->onPause()->onStop()->onDestory()

A->B
onPause(A)->onCreate(B)->onStart(B)->onResume(B)->onStop(A)

A->Home
onPause(A)->onStop(A)

(2)onStart()与onResume()区别理解

onStart():表示Activity正在启动,在后台运行
onResume():对用户可见,可交互

onPause():对用户不可见,不可交互
onStop():表示Activity即将被暂停,在后台

(3)Acitvity的生命周期,如何摧毁一个Activity?

finish(); System.exit(0); this.onDestory();
android.os.Process.killProcess(android.os.Process.myPid());

(4)启动模式定义?有哪些?

标准模式、栈顶复用模式、栈内复用模式、单实例模式
Activity启动模式

2、Service服务

(1)理解,分类,应用场景

Context的子类,有activity,service
用于在后台完成一个时间跨度比较大的工作,不关联界面

完成工作:
访问网络,播放音乐,文件io操作,大数据量数据库操作、OTA升级

特点:Service在后台,应用退出,服务不会停止
运行在主线程中,

本地service:service对象和启动者在同一个进程
远程service:service对象和启动者不在同一个进程
是不是同一个应用

(2)为什么service中可以进行耗时操作吗?不可以直接放线程里面吗?

不可以。 Service和activity是运行在当前app所在的main thread(UI主线程)中的,而耗时操作(如:网络请求、拷贝数据、大文件、OTA升级)会阻塞主线程,出现ANR。

3、BroadCast广播

理解,注册方式,应用场景

注册:动态注册、静态注册

4、ContentProvider内容提供者

(1)ContentProvider是应用间通用的共享数据的方法,Android中通讯录、短信等用到该方式;
(2)也用于跨进程数据分享;

自定义ContentProvider

二、布局、控件相关

1、padding和margin区别

Margin:容器外距离
Padding:容器内部与边框距离

2、gravity和layout-gravity区别

Gravity:内部元素的对齐方式
Layout-gravity:自身相对于父容器的对齐方式

3、recyclerview和listview区别,适配器?

4、recyclerView横向滚动实现,listView能否实现?

5、头像和背景图形模糊化布局实现

Android实现用户圆形头像和模糊背景设计

三、其余知识点

1、传递参数,

(1)A到B
intent,Bundle
(2)B到A传参,B直接finish()
startActivityForResult

2、ANR

应用未响应

应用卡顿长时间卡顿,无法与用户交互就会报错弹出异常对话框
activity5S内未能响应用户的操作,broadcastReceiver的onreceive方法超过10S,Service执行时间超过20S,一般是在这些组件所在的主线程中执行了耗时操作,IO操作,错误的线程操作等

优化方法:基本都是将耗时操作和IO操作放在子线程中执行
1.Handler消息机制
2.AsyncTask异步任务
3.降低子线程的优先级
4.使用IntentService

3、5种常用存储方式

文件存储、内容提供者、Message、SQlite

4、设计模式

单例模式
构造者模式
责任链模式
状态模式
工厂模式
抽象工厂模式
策略模式

5、布局优化

约束布局,减少嵌套
include,merge,ViewStub标签
Android布局优化之include、ViewStub、merge标签

6、图片加载缓存框架:Glide

7、Handle

Android之学习Handler原理的理解与常见问题

8、列表实现

9、事件分发

10、AIDL

11、activity与fragment区别

Activity 代表了一个屏幕的主体,而Fragment可以作为Activity的一个组成元素。
一个Activity可以有若干个(0或n)Fragment构成。你可以把Fragment想象成Activity中的一个控件,只不过相对于一般控件,Fragment与Activity联系更为紧密,随着Activity的生命周期变化,Fragment也随之相应不同的生命周期函数。

12、Activity与Fragment之间通信?

(1)Activity向Fragment传数据
(2)Fragment回传数据给Activity?
A、fragment中准备回调接口 接口中声明传值的回调方法
B、在fragment中定义变量 private MyListener myListener
C、重写fragment中的onAttach()方法:listener = (MyLisener)getActivity();
D、fragment触发事件时回传值
E、Activity中实现回调接口 重写回调方法获取回传的值并显示

13、为什么不能在子线程更新UI

只能在UI线程里面更新界面吗?
不一定,之所以子线程不能更新界面,是因为Android在线程的方法里面ViewRootImpl类中采用checkThread进行判断是否是主线程,这个类是在onResume里面才生成的,因此,如果这个时候子线程在onCreate方法里面生成更新UI,而且没有做阻塞,就是耗时多的操作,还是可以更新UI的。

14、客户端获取实时数据的方式,哪种最好,原因?

15、自定义View、自定义属性

16、AlarmManager闹钟服务

17、SQLite数据库

(1)嵌入式数据库,体积小
(2)数据库是由底层的sqlite.c执行程序的代码动态生成的,不用人为去创建数据库
(3)SQLiteOpenHelper,使用的时候可以创建一个工具类继承这个抽象类,具体步骤是:

一是继承onCreate、onUpgrade方法,这两个方法升级时候使用;
onCreate方法里面创建表,如果已经初始化,第二次不会调用

二是需要有构造函数,需要传入数据库的版本号、数据库名字等;

三是对外提供函数,可以调用SQliteOpenHelper的字段,instance,单例模式创建,定义数据库的信息。
源码中表示传入数据库的版本号需要从1开始,方便数据库升级
Android知识点_第1张图片
(4)databases文件的创建需要靠这句话
Android知识点_第2张图片
(5)创建表,在onCreate()方法内通过写sql语句创建表,数据库初始化时候只会创建一次表,第二次不会创建。
_id、主键唯一、自动增长(autoincrement)、类型(Text);
Android知识点_第3张图片
(6)增删改查

通过sql语句查询返回的是游标,然后迭代游标取数据,取完后记得关闭游标,否则耗费性能,数据库也需要关;
Android知识点_第4张图片
插入通过sql语句插入,注意最好监测数据库是否打开再进行操作
Android知识点_第5张图片

你可能感兴趣的:(Android,Android,Studio,android,面试)