最近我在公司做一些关于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定时服务 提醒电量