六木Sir
六木Sir
- [ ] [Android 开发最佳实践](https://github.com/futurice/android-best-practices/blob/master/translations/Chinese/README.cn.md)
- [ ] [Android快速开发整理(库、插件、常用网站)](https://mp.weixin.qq.com/s/Y8CyrWjmZc2BXM3j_8Mgbg)
# Android内存框架:Ashmem匿名共享内存系统
##n应用是否可以开启N个进程? >可以 ## eg ``` ``` 
>因为多进程首先会有多个Application,数据会被初始化多次,其次进程间通信比较麻烦,还有一个就是每个进程有单独的虚拟机,多个进程就会比较占内存
## Java虚拟机规范(Java SE 7).pdf
拿小米手机举例吧,雷军一直说小米手机不赚钱,在开始做的时候,这个价位确实不赚钱,但是不赚钱,一直亏损的话,咋能撑到现在?按理说早该倒闭才对,这就是小米的厉害之处,人家靠硬件确实不赚钱,但是人家通过广告、服务以及 app 预装赚钱,要知道,在手机内预装一个 app 很贵的,所以在我们买手机之后,会发现预装一大堆 app,这部分是手机厂商的很大一部分收入来源。 但是现在微信搞小程序了,以后一个微信就搞定了,有了微信,就相当于预装了各种 app 了,微信基本把操作系统的事都干了,谁还会去找你预装 app 啊,你手机操作系统发挥的空间也受限了,这让手机厂商的生意越来越难做了啊,而且现在人人都有手机了,移动互联网的流量红利也没了,他们再不抱团取暖,在移动互联网的下半场可能会越来越不好过。 所以,他们不能坐以待毙,抱团向微信发起了反击。 我以前就给大家说过,现在移动互联网只是结束了上半场,但是下半场刚开始。 移动互联网的上半场是流量红利时代,对于应用市场来说更多的是搜索式分发。上半场,用户对 app 是新鲜的,是会愿意主动搜索寻找 app 的。但是移动互联网的下半场,用户对 app 早已免疫,更多的是场景式分发。 相信现在大家已经能感受到,我们手机里也许装了一大堆 app,但是经常让我们打开的 app 就那么几个,而且大多是头部应用,我们没有多余的时间与新鲜感去体验各种新奇古怪的 app 了,我们只有在特定的场景,才会选择需要的 app,而微信,移动互联网时代的最头部 app,现在再也不限于聊天了,它结合小程序,几乎能解决各种场景。 除了场景之外,移动互联网下半场最最重要的一点是「注意力经济」,说白了,只要能吸引你的注意力,那么我能发挥的空间就很大,用户给我创造的价值也更大,其实头条现在的迅猛发展,其实就是靠着「注意力经济」,它的各条产品线,基本都在霸占你的注意力,这就是头条的厉害之处。
## 三、Android 基本组件 Android 基本组件指 Activity、Fragment、Service、BroadcastReceiver、 ContentProvider 等等。 1. 【强制】Activity 间的数据通信,对于数据量比较大的,避免使用 Intent + Parcelable 的方式,可以考虑 EventBus 等替代方案,以免造成 TransactionTooLargeException。 2. 【推荐】Activity#onSaveInstanceState()方法不是 Activity 生命周期方法,也不保证 一定会被调用。它是用来在 Activity 被意外销毁时保存 UI 状态的,只能用于保存临 时性数据,例如 UI 控件的属性等,不能跟数据的持久化存储混为一谈。持久化存储...
## 四、UI 与布局 1. 【强制】布局中不得不使用 ViewGroup 多重嵌套时,不要使用 LinearLayout 嵌套, 改用 RelativeLayout,可以有效降低嵌套数。 说明: Android 应用页面上任何一个 View 都需要经过 measure、layout、draw 三个步骤 才能被正确的渲染。从 xml layout 的顶部节点开始进行 measure,每个子节点都需 要向自己的父节点提供自己的尺寸来决定展示的位置,在此过程中可能还会重新 measure(由此可能导致 measure 的时间消耗为原来的 2-3 倍)。节点所处位置越 深,套嵌带来的...
## 五、进程、线程与消息通信 1. 【强制】不要通过 Intent 在 Android 基础组件之间传递大数据(binder transaction 缓存为 1MB),可能导致 OOM。 2. 【强制】在 Application 的业务初始化代码加入进程判断,确保只在自己需要的进程 初始化。特别是后台进程减少不必要的业务初始化。 正例: ``` public class MyApplication extends Application { @Override public void onCreate() {...