# CacheFunctionUtil 一个给重复执行的函数提供可靠缓存的轻量库。 ## 怎么用? 举个栗子: ``` public static List getInstalledAppPackageNameList(Context context) { return CacheFunctionUtil.get().staticCache(() -> { return context.getPackageManager().getInstalledApplications(0).stream() .map(applicationInfo -> applicationInfo.packageName) .collect(Collectors.toList()); }); } ``` 这样,`getInstalledAppPackageNameList` 本体将只在第一次调用时真正执行. 重复调用时将直接得到缓存的结果. ### 带参数? ``` public static Palette generatePaletteFromDrawable(Drawable drawable) { return CacheFunctionUtil.get(R.id.function_generate_colors).staticCache(() -> { Bitmap bitmap = BitmapUtil.drawableToBitmap(drawable); return Palette.from(bitmap).generate(); }, drawable); } ``` 针对不同的 `drawable` 对象 (使用 `hashCode()` 区分), `CacheFunctionUtil` 将缓存不同的结果. ### 清空缓存? 调用 `return CacheFunctionUtil.get(R.id.function_xxx_yyy).clear()` 即可. 推荐对不同的业务逻辑线使用不同的 ID (当然不用也可以). ## 依赖? CacheFunctionUtil 只有一个 class. 直接复制粘贴吧. ## How it works? 它的本质是个 HashMap ,关键点在于 lambda 表达式. Android 会在编译时为每个 lambda 表达式生成单独的类,所以只需要以 `lambda.getClass().getName() + paramenters.hashCode()` 为 key 将结果缓存到 HashMap 即可. ## License MIT