插件化笔记#1 - ClassLoader 初探

Demo: https://github.com/2BAB/Android-Plugin-Dev-Notes

有几个ClassLoader

如MainActivity的代码所示,

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ClassLoader classLoader = getClassLoader();
        if (classLoader != null) {
            Log.i("[onCreate]", classLoader.toString());
            while (classLoader.getParent() != null) {
                classLoader = classLoader.getParent();
                Log.i("[onCreate While]", classLoader.toString());
            }
        }
    }

打印出来的结果是

I/[onCreate]: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/example.com.classloaderdemo-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]]
I/[onCreate While]: [email protected]
I/[onCreate While]: [email protected]

卧槽,怎么有三个,这跟文章说的只有两个不一样啊 - -,而且我也只听师兄说过PathClassLoader和BootClassLoader,没见过这个IncrementalClassLoader啊,它是什么鬼?

Android 5.0 以上 Chrome AppBar 颜色定制

放假在家用回了 Nexus 4,在 Lollipop 作为日常系统使用一段时间后,发现了一个有意思的东西。如下图,正常情况下使用 Chrome 浏览网站时,多任务的预览界面上,Chrome 的 App bar 是灰色一片。而其背后的知乎、Gmail因为设定了 colorPrimary 而极具辨识度。

未开启“合并标签页和应用”的界面,开启后的界面,Overview界面。

未开启“合并标签页和应用”的界面 / 开启后的界面 / Overview

无法卸载的 App - 设备管理器漏洞

前两天某朋友发现手机有个app无法卸载,后知其因设备管理器激活导致,遂去尝试取消,但却在取消那刻卡机。反复折腾之后,只能重刷。后来他发了一篇

ListView 两种固定标头的技巧

第一种情况:

界面上有三个view,上面是一个要隐藏的View A,中间是一个不隐藏的View B,下面有一个ListView C。当C向上滑动的时候,如果A还没有被隐藏,就随着滑动而隐藏,当A完全隐藏之后,B就一直在最上面,C还可以继续向上滑动;当C向下滑动的到底后A逐渐显示出来。

突发奇想的省力方法:

给 ListView C 添加一个HeadView(包含A、B),然后另外准备一个外部的B在屏幕顶部,一开始不可见。ListView当前滚动高度超过A的高度时,显示外部的B;滚动高度小于A时隐藏内部的B。

Lollipop#1 - Android 5.0 APIs Guide

原文链接 , 翻译 by 2BAB。

API Level: 21

Android 5.0 ( LOLLIPOP ) 的到来,给用户和开发者提供了许多新的特性。这篇文档将会把最值得关注的新 API 做一个介绍。

Start developing

要构建 Android 5.0 的应用,首先得下载 Android SDK,然后通过SDK Manager下载 Android 5.0 SDK Platform 和 System Images。

为了在真机上测试应用,请将你手头的 Nexus 5 或者 Nexus 7 刷成 预览版固件( 现大部分 Nexus 设备已经支持正式版5.0,固件见此 - 译者注 ) 。

Update your target API Level

为了在运行 Android 5.0 的设备上优化你的应用,请先将 targetSdkVersion 设为“21”,并在 Android 5.0 环境下进行测试,然后才是发布这个升级版应用。

你可以使用 Android 5.0 的 API 但也同时兼容老版本,具体来说就是在代码中添加条件判断——在使用不兼容你的 minSdkVersion 的API前,检查你的system API level。关于维持应用向后兼容的更多信息,请看 Support Different Platform Versions.

更多关于 API level 工作原理的信息,请看 What is API Level?

Android 里不能改变的东西 [译]

原文链接 , 翻译 by 2BAB。 [本文作者 Dianne Hackborn, 一位足迹遍布所有安卓应用框架的工程师 - Tim Bray] 有时,一位开发者会对他的应用做一些改变(然后发布新版本)。

Hello World

从 Octopress 转到 Hexo,新的开始,新的不同。 它将仅是一个技术博,只做好这一件事。