基础知识笔记

1、Fragment:两种Adapter之间的区别

FragmentStatePagerAdapter会销毁不需要的Fragment,FragmentStatePageAdapter适用于Fragment较多的情况。而FragmentPageAdapter则适用于固定的,少量的Fragment情况。

2、BroadcastReceiver:本地广播LocalBroadcastReceiver

本地广播只能够在应用程序的内部进行传递,并且广播接收器也只能接收来自应用程序发出的广播,这样保证广播的安全性。

注意事项

本地广播无法通过静态注册来接收,相比起系统全局广播更加高效。

在广播中启动activity的话,需要为intent加入FLAG_ACTIVITY_NEW_TASK的标记,不然会报错,因为需要一个栈来存放新打开的activity。

广播中弹出AlertDialog的话,需要设置对话框的类型为:TYPE_SYSTEM_ALERT不然是无法弹出的。

3、Service:onStartCommand的返回值,IntentService实现原理

START_STICKY:系统在onStartCommand()返回后杀死了这个服务,系统就会重新创建这个服务并且调用onStartCommand()方法,但是它不会重新传递最后的Intent对象。这适用于不执行命令的媒体播放器(或类似的服务),它只是无限期的运行着并等待工作的到来。

IntentService是继承并处理异步请求的一个类,在IntentService内有一个工作线程来处理耗时操作,启动IntentService的方式和启动传统的Service一样,同时,当任务执行完后,IntentService会自动停止。

4、AsyncTaskHandlerThreadLruCacheLinkedHashMapSparseArray

AsyncTask即异步任务,是Android给我们提供的一个处理异步任务的类

HandlerThread一个继承自Thread的类HandlerThread,这个类对Java的Thread做了很多便利的封装。

LruCache应用缓存

LinkedHashMap:有序的HashMap

SparseArray:相比较HashMap更高效,适用于1000条一下数据

5、RecyclerView相比较ListView优点

从性能上看,RecyclerView并没有带来显著的提升,不需要频繁更新,暂不支持用动画,意味着RecyclerView优势也不太明显,没有太大的吸引力,ListView已经能很好地满足业务需求。

进一步来讲,结论是:列表页展示界面,需要支持动画,或者频繁更新,局部刷新,建议使用RecyclerView,更加强大完善,易扩展;其它情况(如微信卡包列表页)两者都OK,但ListView在使用上会更加方便,快捷。

6、约束布局ConstraintLayout(增强型的相对布局)

约束布局集LinearLayout(线性布局),RelativeLayout(相对布局),百分比布局等的功能于一身,功能强大,使用灵活。

7、APP启动

使用一个没有ActionBar的主题,比较快,而如果连StatusBar也去掉了,速度最快!

如果想提高APP的启动速度,尤其是使用Splash的App,务必将第一个Activity的主题设为FullScreen的,这样能有效提高启动速度

8、Android Lint工具

Android Studio使用Lint进行代码检查,它能够帮助我们检查项目中存在的问题,让我们更有规范性的开发App。

它能够检查出:xml文件里是否存在hardcode硬编码、unused resources没有使用到的资源、probable bug可能的bug等等。

9、被动定位

被动定位较少用(API=8加入),该方式非主动请求位置信息而是被动接收位置更新,最省电。App想获位置信息只需开一位置监听后等其它应用或服务主动发位置请求,App可同主动发请求组件同时接收更新。

10、Android闹钟

AlarmManager是Android中常用的一种系统级别的提示服务,在特定的时刻为我们广播一个指定的Intent。

11、Android WakeLock

wakelock是一种锁的机制,只要有应用拿着这个锁,CPU就无法进入休眠状态,一直处于工作状态。

12、Android APK大小优化

pngquant是国外的一个有损的PNG压缩开源库,提供了命令行形式和源码库形式。

通过这个库的转化可以显著减少png文件大小(通常减少70%),并且保持原有透明度通道。

生成的图片文件可以兼容所有现代web浏览器,在IE6下比24-bit PNGs也有更好的表现。

13、Android APK Analyser

Android Studio中的 APK Analyser 将会拆解你的应用并让你知道 .apk 文件中的那个部分占据了大量空间。

14、Analyser下的classes.dex

classes.dex包含了所有 Java 代码。当你编译你的应用时,gradle 会将你的所有模块里的 .class 文件转换成 .dex 文件并将这些文件合成一个 classes.dex 文件。

单个的classes.dex文件可以容纳大约 64K 方法。如果你达到了这个限制,你必须要在你的工程中启用 multidexing。这将会创建另一个 classes1.dex 文件去存储剩下的方法。

可以通过混淆将未使用的方法移除来降低apk大小。

15、Android列表优化

▶ ItemView的变化

在我们根据数据类型来控制一个View的显隐时,会触发布局的重新测量、布局、绘制等操作,若itemView的布局比较复杂,重新测量绘制会很耗时间,引起列表卡顿。这个时候可以将数据和itemView分解成不同的类型,根据类型来绑定对应的itemView,减少布局的重绘操作。

▶ 重用OnClickListener

我们直接设置点击事件,在滑动列表时会不停的重复创建新的OnClickListener,旧的OnClickListener会被标记为需要垃圾回收,当需要回收的对象过多的时候会引起GC,导致列表卡顿。可以创建一个通用的OnClickListener,把数据放入Button的Tag中,根据id来判断是哪个Button执行了点击,来取出数据、执行不同的逻辑。

16、性能优化工具

TraceView、Systrace、调试GPU过度绘制 & GPU呈现模式分析、Hierarchy Viewer、MAT、Memory Monitor & Heap Viewer & Allocation Tracker、LeakCanary、Lint。

17、ANR原理

ANR(Application Not responding),是指应用程序未响应,Android系统对于一些事件需要在一定的时间范围内完成,如果超过预定时间能未能得到有效响应或者响应时间过长,都会造成ANR。一般地,这时往往会弹出一个提示框,告知用户当前xxx未响应,用户可选择继续等待或者Force Close。

造成ANR原因:

● Service Timeout:服务在20s内未执行完成;

● BroadcastQueue Timeout:比如前台广播在10s内执行完成

● ContentProvider Timeout:内容提供者执行超时

● inputDispatching Timeout:输入事件分发超时5s,包括按键分发事件的超时。

18、路由框架Arouter

路由:映射页面跳转关系的,当然它也包含跳转相关的一切功能。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容