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:  负责