Android思维导图 Android思维导图 - 简书 !
blog含有下面这些导图: 四大组件,UI 设计,常用view使用,网络,线程和进程,数据存储,进阶学习,编程基础,网络协议,数据库,开源框架,测试基础
android上层:4大组件,handler机制,控件使用(xml layout,控件属性) sufaceText
Camera: startPreview
参考:Android Camera 流程学习记录(四)—— Camera.startPreview() flow - StoneDemo - 博客园
take phone
Android应用启动、退出分析 Android应用启动、退出分析 - 简书
垃圾回收
5、异常
1)ANR(application not responding)
产生原因
这个异常经常会遇到,它会弹出一个对话框,让用户选择是等待还是关闭程序。
在Activity最长的执行时间是5s,Service中是20s,BroadcastReceiver中,最长的执行时间是10s,如果在这个事件内没有完成,系统就会弹出这个对话框,主要是由WMS和AMS监视的。所以可见,产生这个异常的原因就是在主线程中做了耗时操作。
解决
1、使用AsyncTask处理耗时IO操作
2、使用handler处理工作线程的耗时任务
3、Activity的onCreate()和onResume()回调中尽量避免耗时的代码
2)OOM(out of memory)
产生原因
当前占用的内存加上我们申请的内存超过了Dalvik虚拟机最大的内存限制就会抛出该异常。
关于内存异常容易混淆的概念
内存溢出:就是oom异常。这个问题最严重。
内存抖动:短时间内大量的对象被创建,然后又被马上释放,这个问题相较那两者较轻。
内存泄漏:内存中的某些对象,已经无法被其它对象引用到了,但是它还引用到其它没有被回收的对象,导致GC无法产生作用,累积到一定程度,就会造成内存溢出
android guava:
是java sdk的包装,简单有效
进程:
多线程,多进程分别应用场景----android基础
多线程:一个下载一个ui. 多进程:多个app:比如播放视频,音乐service停止--使用广播进程通信
android:process 应用实现多进程需要依赖于android:process这个属性
该进程属性可用于activities、services、content providers和broadcast receivers 和指定的进程中应该执行的特定组件。
,,,,,,
进程交互:两个视频播放,暂停前一个:context.sendOrderedBroadcast(new KeyEvent(KeyEvent.ACTION_DOWN),null)
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
loadLibrary动态库加载过程分析
动态库加载程,调用栈如下:
System.loadLibrary()
Runtime.loadLibrary()
Runtime.doLoad()
Runtime_nativeLoad()
LoadNativeLibrary()
dlopen()
dlsym()
JNI_OnLoad()
System.loadLibrary()和System.load()都用于加载动态库,loadLibrary()可以方便自动加载依赖库,load()可以方便地指定具体路径的动态库。对于loadLibrary()会将将xxx动态库的名字转换为libxxx.so,再从/data/app/[packagename]-1/lib/arm64,/vendor/lib64,/system/lib64等路径中查询对应的动态库。无论哪种方式,最终都会调用到LoadNativeLibrary()方法,该方法主要操作:
- 通过dlopen打开动态共享库;
- 通过dlsym获取JNI_OnLoad符号所对应的方法;
- 调用该加载库中的JNI_OnLoad()方法。
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
老罗android之旅 前言 · 老罗的Android之旅(总结) · 看云---书《深入理解andrid内核》开源,内容非常全,ppt写的好,全书写的一般
Android tips: https://blog.csdn.net/fdsafwagdagadg6576/article/details/110873613
Override 重写基类hansh
不加是怎么样的?
如果你不加@Override,则编译器将不会检测出错误,而是会认为你为子类定义了一个新方法:oncreate。
调试
It has a full gradle build for the first time , it is a long time.
run ---attach debugger to android process --- polycom.service.legacyapi (polycom.service.facade)--set breakpoint
debug window to debug.
how to see java log:
logcat window can see trace and log.info log output
how to see c++ log:
/data/log