Android知识点总结,学习过程梳理
16lz
2021-01-25
最近我在公司做一些关于Android方面的培训,就想总结下Android常用到的一些技术点,可以给同事了解下Android的技术点体系,为学习和提升提供方向。简要总结,需要了解,请自行深入学习。
Android系统的文件结构 Android系统的组织结构 简单的四个分层,各自包含哪些内容 Activity Activity生命周期,理解生命周期的重要方法和运行逻辑 Activity横竖屏导致的生命周期的重启和数据保存策略,android:configChanges设置“orientation”“orientation |keyboardHidden”对生命周期重启的影响 了解Activity的配置信息,Activity的打开方式(显示,隐式) Service 作用:后台服务和跨进程访问 service 在配置文件中的写法和配置信息,独立进程和依附主进程 如何打开service ,service 的生命周期 startService和bindService对service 生命周期的影响和区别,多次start和多次bind同一个service对他们生命周期的影响 跨进程访问 AIDL的写法 serviceConnection IBinder回调对象 broadcast 几种不同的广播类型,普通、系统、有序、粘性、非粘性、应用内 无序广播 无法中止广播传播 有序广播 abortBroadcast 中止广播传播 添加内容setResultExtras(Bundle); broadcastReceiver 动态订阅、静态订阅 动态订阅必须用隐形Intent发送广播(显式、隐形Intent的区别 ) contentProvider 使用方式 监听数据变化 contentObserver onchange() "content://com.example.testprovider/single" 动画 Tween Animation补间动画 Frame Animation帧动画 Dialog AlertDialog AlertDialog.Builder builder.create().show() 7种常用的 自定义Dialog Notify 通知 一般不会自己实例化 Android 3.0之前和之后写法的区别 Notification.Builder/NotificationCompat.Builder getSystemService(...) ->notificationManager.notify() Notification 小图、标题、文本内容 PendingIntent、Intent的区别 即将发生的意图 马上发生的意图 大视图(Big View) android4.1+ notification.setStyle(....); 通知栏展示进度 builder.setProgress(....) 自定义通知 RemoteViews builder.setcontent(..) 通过控件ID设置内容 remoteViews.setImageViewIcon(viewid,icon) Fragment 的使用 自定义View 自定义View 的属性,10种基础属性 获取自定义属性的值 重写onMesure 自己测量 重写onDraw postInvalidate();->重绘onDraw() 使用时引入命名空间 跨进程通信、应用程序间通信 AIDL 广播 ContentProvider Activity 线程间通信 开启不同线程方式的优缺点 Handler的用法 Handler.post(Runnable) 注意:这里没有起新线程 Handler消息处理的机制:Looper消息循环、Message消息、Thread、MessageQueue消息队列互相的关系和作用 Activity.runOnUiThread(Runnable) View.post(Runnable) .postDelay(Runnable,long) AsyncTask HandlerThread 起新线程,注意:需要有主线程的looper的handler才能操作UI线程 Thread ExecutorService线程池的用法 XML解析的几种方式 JSON解析 解析库 数据存储 sharePreferences的用法 IO流文件 序列化对象的写入文件方式 网络存储 SQLite 属性系统 Sytem Property(C++) contentProvider Android中常见的设计模式 工程模式 单例 例如:日历 CalendarDatabaseHelper 观察者 代理模式 提供者模式 抽象工厂 MVC 例如:ListView->View , getData()->model , Adapter->control OOM ANR 避免出现这些问题 代码混淆 注意第三方包尽量避免混淆 View和ViewGroup触控的事件 view 分发触控事件dispatchTouchEvent 触发触控事件onTouchEvent viewgroup onIterceptTouchEvent拦截触控事件 参考经典的三层结构图 LinearLayout1=>LinearLayout2=>view 内存优化的思路 调试工具,TraceView 自动化测试工具:monkey monkey runner 可以看出各个函数的调用时间,调用次数,平均调用时间,时间占用百分比 插件化程序 组件化 动态加载 Dex的最大方法数 Integer的最大数=》65535 java : classLoader Android : DexClassLoader/PathClassLoader 第三方库 Okhttp Fresco 原理 bitmap 在3.0前后的存储机制的问题 内存泄漏 查询数据库没有关闭cursor 构造Adapter,没有使用ContentView Bitmap没有被释放 对象被生命周期长的对象引用 内存溢出 图片过大 listview写法错误 横竖屏切换,写法问题 方法:Android自定义堆大小,优化Dalvik的内存,软引用 强引用 软引用 弱引用 虚引用 的区别 耗电问题 大数据传输 => GZIP下载数据 网络切换 =>网络连接判断 解析大量文本数据 =>高效率的数据格式解析方式 回收JAVA对象 少用GPS 少用浮点数运算 获取屏幕数据,使用缓存 避免service不停使用sleep,请求 使用AlarmManager定时服务 提醒电量
Android系统的文件结构 Android系统的组织结构 简单的四个分层,各自包含哪些内容 Activity Activity生命周期,理解生命周期的重要方法和运行逻辑 Activity横竖屏导致的生命周期的重启和数据保存策略,android:configChanges设置“orientation”“orientation |keyboardHidden”对生命周期重启的影响 了解Activity的配置信息,Activity的打开方式(显示,隐式) Service 作用:后台服务和跨进程访问 service 在配置文件中的写法和配置信息,独立进程和依附主进程 如何打开service ,service 的生命周期 startService和bindService对service 生命周期的影响和区别,多次start和多次bind同一个service对他们生命周期的影响 跨进程访问 AIDL的写法 serviceConnection IBinder回调对象 broadcast 几种不同的广播类型,普通、系统、有序、粘性、非粘性、应用内 无序广播 无法中止广播传播 有序广播 abortBroadcast 中止广播传播 添加内容setResultExtras(Bundle); broadcastReceiver 动态订阅、静态订阅 动态订阅必须用隐形Intent发送广播(显式、隐形Intent的区别 ) contentProvider 使用方式 监听数据变化 contentObserver onchange() "content://com.example.testprovider/single" 动画 Tween Animation补间动画 Frame Animation帧动画 Dialog AlertDialog AlertDialog.Builder builder.create().show() 7种常用的 自定义Dialog Notify 通知 一般不会自己实例化 Android 3.0之前和之后写法的区别 Notification.Builder/NotificationCompat.Builder getSystemService(...) ->notificationManager.notify() Notification 小图、标题、文本内容 PendingIntent、Intent的区别 即将发生的意图 马上发生的意图 大视图(Big View) android4.1+ notification.setStyle(....); 通知栏展示进度 builder.setProgress(....) 自定义通知 RemoteViews builder.setcontent(..) 通过控件ID设置内容 remoteViews.setImageViewIcon(viewid,icon) Fragment 的使用 自定义View 自定义View 的属性,10种基础属性 获取自定义属性的值 重写onMesure 自己测量 重写onDraw postInvalidate();->重绘onDraw() 使用时引入命名空间 跨进程通信、应用程序间通信 AIDL 广播 ContentProvider Activity 线程间通信 开启不同线程方式的优缺点 Handler的用法 Handler.post(Runnable) 注意:这里没有起新线程 Handler消息处理的机制:Looper消息循环、Message消息、Thread、MessageQueue消息队列互相的关系和作用 Activity.runOnUiThread(Runnable) View.post(Runnable) .postDelay(Runnable,long) AsyncTask HandlerThread 起新线程,注意:需要有主线程的looper的handler才能操作UI线程 Thread ExecutorService线程池的用法 XML解析的几种方式 JSON解析 解析库 数据存储 sharePreferences的用法 IO流文件 序列化对象的写入文件方式 网络存储 SQLite 属性系统 Sytem Property(C++) contentProvider Android中常见的设计模式 工程模式 单例 例如:日历 CalendarDatabaseHelper 观察者 代理模式 提供者模式 抽象工厂 MVC 例如:ListView->View , getData()->model , Adapter->control OOM ANR 避免出现这些问题 代码混淆 注意第三方包尽量避免混淆 View和ViewGroup触控的事件 view 分发触控事件dispatchTouchEvent 触发触控事件onTouchEvent viewgroup onIterceptTouchEvent拦截触控事件 参考经典的三层结构图 LinearLayout1=>LinearLayout2=>view 内存优化的思路 调试工具,TraceView 自动化测试工具:monkey monkey runner 可以看出各个函数的调用时间,调用次数,平均调用时间,时间占用百分比 插件化程序 组件化 动态加载 Dex的最大方法数 Integer的最大数=》65535 java : classLoader Android : DexClassLoader/PathClassLoader 第三方库 Okhttp Fresco 原理 bitmap 在3.0前后的存储机制的问题 内存泄漏 查询数据库没有关闭cursor 构造Adapter,没有使用ContentView Bitmap没有被释放 对象被生命周期长的对象引用 内存溢出 图片过大 listview写法错误 横竖屏切换,写法问题 方法:Android自定义堆大小,优化Dalvik的内存,软引用 强引用 软引用 弱引用 虚引用 的区别 耗电问题 大数据传输 => GZIP下载数据 网络切换 =>网络连接判断 解析大量文本数据 =>高效率的数据格式解析方式 回收JAVA对象 少用GPS 少用浮点数运算 获取屏幕数据,使用缓存 避免service不停使用sleep,请求 使用AlarmManager定时服务 提醒电量
更多相关文章
- Android(安卓)3.0以上UI主线程进行http通信
- 通过模拟学习Handler机制
- Android中进程与线程及如何在子线程中操作UI线程
- android动手写控件系列——老猪叫你写相机
- Android(安卓)的进程与线程
- Android(安卓)总结4种线程中操作UI界面的方法
- Android(安卓)系统Handler用法简介
- Android应用程序模型:应用程序,任务,进程,线程
- Android客户端与服务器之间的通信