android知识
来源:互联网 发布:macbook windows 截屏 编辑:程序博客网 时间:2024/06/03 09:24
activity
1.running
2.paused 不能交互
3.stopped 完全被覆盖
4.killed
oncreate onstart看见了,不能点击, onresume看见了,能点击
home键 -》onpause->onstop(内存吃紧,可能被回收)
onrestart-》onstart-》onresume
退出 -》onpasue-》onstop-》ondestroy (资源回收)
进程优先级:
前台进程 , 可见(不能点击),服务,后台(按了home键),空进程
任务栈:task(栈,后进,先出),不唯一。
activity要被复用的
1.standard
2.singletop(如果任务栈顶,复用)
3.singletask(复用,栈以上被删除) onNewintent
4.singleinstance
scheme跳转协议:
app,h5之间跳转。app之间跳转。
fragment:
必须依附activity
静态加载:xml
动态加载:add
viewpager -》
FragmentPagerAdapter
FragmentStatePagerAdapter:页面较多的情况,会内存回收。
生命周期:
fragment中调用activity中的方法,getActivity
activity 调用fragment
fragment调用fragment,findFragmentByid.
Fragmentmanage: replace add remove区别:
service:
后台长时间,没有界面,可以没有activiy, 不能有耗时操作,运行在主线程。
service和thread区别:
service:可以开线程。播放音乐,天气预报,数据统计。
thread :activiy不能控制thread
startSERVICE:后台一直运行
bindService:可以
broadcast receiver:
应用程序之间,可以通知。
场景:
1.同一个app,跨进程。
2.不同app之间。
静态注册:
进程杀死了,也能执行。
动态:
跟随activity生命周期。
通过Binder机制向AMS进行注册。
本地广播:实现进制:handler, 高效。
Webview 的坑:
16版本以前,addJavascriptInterface。
布局,在其他容器中,内存泄漏。
jsbridge.
onPageFinished -> WebChromeClinet.onProgerssChanged
后台耗电。System.exit.
Webview 硬件加速。最好关闭硬件加速
http://blog.csdn.net/xygy8860/article/details/53334476?utm_source=itdadao&utm_medium=referral
http://blog.csdn.net/hytfly/article/details/48489251
http://blog.csdn.net/xygy8860/article/details/53334476?utm_source=itdadao&utm_medium=referral
ViewParent parent = mWebView.getParent();
if (parent != null) { ((ViewGroup) parent).removeView(mWebView);}mWebView.destroy();
asynctask
内存泄露。
在destroy里,销毁asynctask。
结果丢失,在转屏后,activity被销毁。
handlethread = handler + thread + looper
避免多次创建thread。只有一个线程,不能并发。
intentservice 继承 service, 串行执行。
anr:
oom:
内存溢出/内存抖动/内存泄漏
图片显示
即时释放内存:java + c++
图片压缩:insamplesize
inBitmap属性 ?????
捕获异常?????
listview: convertview/lru
onDraw 避免创建对象
谨慎使用多进程。
ui卡顿:
60fps-》16ms
手机打开gpu debug选项, overdraw ,层叠的背景。
布局layut过于复杂
动画过多
view过度绘制。 measure layout 过度。
gc过多
布局优化:merge , 尽量gone,不用invisiable
列表
内存泄漏:
java内存泄漏:
1.静态存储器:全局变量
2.栈区:基本类型,引用,容量有限
3.堆区:new出来, 用gc自动回收
内存管理:
有向图。
无用对象,得不到释放。
单例:用了activity 的context
匿名内部类handler :使用static 类,activity的弱引用。
尽量使用避免使用static
资源未关闭,广播
asynctask, 要cancel. bitmap要recycle.
service完成任务,尽量停止。
使用zip对齐的APK
谨慎多进程
冷启动优化 :第一次开机,或者进程被杀死。application,启动时间看log。
热启动: 没有application初始化
冷启动优化:
减少oncreate的方法工作量。
application 不要参与业务操作。
android不用静态变量存储数据。也许会被kill掉。
传递数据:文件/sp/contentprovide
sp:不能跨进程同步。文件过大。数据安全。
内存序列化:
1.serializeble 性能不好
2.Parcelable:进程间通信
view树的流程。
measure->layout->draw
measure - > onMeasure - > setMeasuredDimension
ondraw
invalidate()
postInvalidate:非ui线程调用
requestLayout() :
所以requestLayout有可能会导致onDraw被调用,也可能不导致onDraw被调用,取决于view的l,t,r,b是否改变
事件分发机制
activity - > Phonewindow ->Decorview->Viewgroup->-...view
dispatchTouchEvent
onInterceptOunchEvent 只有viewgroiup
onTouchEvent
listview
RecycleBin机制:
Okhttp:
lint:
MVC:耦合性低。可扩展性啊。模块职责明确。
1 M:业务逻辑
2 V:显示
3.C:activity 交互问题,桥梁作用。
MVP:
1.M: 业务逻辑,实体模型
2.V: acitivity
3.P: 负责
- Android知识
- android知识
- android知识
- android 知识
- Android知识
- Android 知识
- Android知识
- android知识
- android知识
- Android JNI知识简介
- android 知识积累
- Android JNI知识简介
- Android 小知识
- Android知识回顾
- Android界面相关知识
- android NDK 初步知识
- Android的底层知识
- Android JNI知识简介
- ios开源项目
- Android程序的执行流程分析
- Java代码实现SMS短信发送功能
- C#中String的用法
- 编程第七十一天
- android知识
- Maven的使用(一)
- unity修改材质属性和更换shader
- 通过自定义的 Array 类来实现变长数组
- Android Studio 设置代码提示和代码自动补全快捷键--Eclipse 风格
- SqlServer 2016模糊匹配的几种方式和效率问题
- 51nod 1799 二分答案
- 进程学习7--exec族函数
- svn xp 32位系统的下载网址