安卓开发中的封装陷阱与突破(androidsdk封装)
论安卓铁屋中的囚徒
近来夜读《天工开物》,忽见西人所谓"安卓系统"者横行于世。街巷间尽是垂首划屏之辈,倒似当年阿Q画押时伸长脖子的模样。忽忆起前日里见几个后生围坐争论SDK封装之事,面上俱是青白颜色,仿佛被困在代码筑就的铁屋里。
"封装本是极好的物事,怎地倒成了作茧自缚的勾当?"
一、类与接口的吃人筵席
观今之安卓开发,Activity好比未庄的老秀才——看着体面周全,内里早被各种回调蚕食得只剩空壳。onCreate()
里塞着视图初始化的皮肉,onDestroy()
中吊着资源释放的残骨。
- 视图绑定如裹脚布:findViewById这等老物什仍要后生们亲手摆弄,倒似新青年偏要穿前朝的朝靴
- 生命周期似无常索:横竖躲不过configuration change这等鬼打墙的把戏
- 回调地狱若阿鼻狱:AsyncTask坟头的草已三尺高,却仍有孤魂野鬼在LiveData的回调链里徘徊
二、封装的药与刀
有识之士欲造救世良方,将BaseActivity比作华老栓的人血馒头。abstract class BaseActivity : AppCompatActivity() { ... }
——这行代码写得愈工整,倒愈显出吃人筵席上刀叉的寒光来。
class MainActivity : BaseActivity() {
// 层层继承之下
// 竟不知父辈在onCreate里埋了多少定时炸弹
}
君不见Jetpack组件库虽好,ViewModelProviders这等旧制仍如九斤老太的裹脚布般又臭又长?幸而后来者用起by viewModels()
,方知委办代理之法可破这层层枷锁。
三、组合之道的新曙光
"从来如此便对吗?"狂人的诘问在IDE中回响
旧法继承 | 新派组合 |
---|---|
BaseActivity ↓ BaseXxxActivity ↓ 具体业务类 | class MyActivity : ComponentActivity() { // 功能模块化注入 } |
多级父类控制反转难 | 单一职责接口灵活装配 |
钻石继承困境 (Diamond Problem) | 装饰器模式扩展无忧 |
// 网络模块化作鹰犬 interface NetworkDelegate { fun fetchData(callback: (Result) -> Unit) } // UI控制权收归中央 class ViewController(private val root: ViewGroup) { fun showLoading() { ... } } // Activity终成光杆司令 class CleanActivity : AppCompatActivity() { private val network = RetrofitDelegate() private val views = ViewController(findViewById(R.id.root)) override fun onCreate(...) { network.fetchData { result -> views.updateUI(result) } } }
* 此段伪代码乃仿照当下流行架构所作,望读者明鉴其中真意。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。