平时开发的时候发现了一些小的把戏技巧。整理其中的一些向分享一下
- sdk封装资源
- 非阻塞递归
- 如何获取视图大小
一、sdk封装资源
android的一大难题便是资源文件的绑定。如果我们为了模块化,想要将一个小的功能做成sdk的样式,那么该怎么做呢?
Java普遍的习惯是将功能打包成为一个jar包。其好处很多,解耦合。然而在android开发中,这样子做却有一个大问题。问题便是jar包形式难以提供资源。
Android官方推荐的做法是编写Android Libarary。Android Libarary其实就是一个Android工程,所以可以像普通Android项目一样去引用各种资源。这种方式有它的好处,可包含资源,可自由修改源码。这对于内部工程来说非常合适,可是如果想将功能包装成binary版本,那么还是得依靠jar包形式了。
有没有一种封装方式,能够既提供jar包,又提供资源呢?答案是肯定的。只要在jar包中包含assets文件夹,那么引用jar包的android项目事实上也包含了该资源文件。在编译apk阶段,jar包的资源便被解压进入apk的assets目录了。最终会被拷入私有文件夹data目录。
以腾讯的openapi为例。其打包的jar包中包含了assets目录。Android项目想引用资源非常简单,只消这样一句话即可:
TencentOpenRes.getBigLoginBtn(getAssets())
注:其实jar包中可以通过JarURLConnection来提取资源。不过我觉得此种assets小把戏更符合android编程习惯,很适合用于包含资源的binary sdk情境。
二、非阻塞递归
递归的思维是:在满足退出条件之前,不断重复调用自己。
在Android平台上面,通过使用Handler我们可以实现非阻塞递归。
一个同步版本的递归是这个样子的:
int recursion(int x)
{
if(x==1) return 1;
return x*recursion(x-1);
}
非阻塞版本的递归则是这个样子的。
int x;
int result=1;
Handler handler=new Handler();
Runnable task=new Runnable() {
@Override
public void run() {
if(x==1) handler.removeCallbacks(task);
result=x*x-1;
x--;
handler.post(task);
}
};
void start()
{
x=50;//init
handler.post(task);
}
看起来,非阻塞的递归用起来很麻烦。其实,只要把task想象成一个时间片,它穿插在UI线程中工作,分时的完成计算任务。例如:UI-Event,View-DRAW,task,UI-Event,task,task。
那么,非阻塞递归在什么情况下使用呢?在配合视图工作时其实很有用。例如,计算滑动重绘视图。当滑动结束时移除重绘回调。
三、安全的获取视图大小
如果你的View设置了WRAP_CONTENT或者MATCH_PARENT。或者是通过weight和Relative布局的,那么View的大小往往需要一轮全局layout才能measure得出。
举个例子,在Activity的onCreate后调用view.getMeasureHeight()也许会得到0。拦截到view的onMeasure似乎是个不错的注意。不过这太麻烦了,用继承做显得小题大做。下面介绍两种方法。
第一种:
view.post(new Runnable() {
@Override
public void run() {
System.out.println(view.getMeasuredHeight());
}
});
这种方法向该view的执行队列中插入了一段runnable代码。它假设了View的measureHiearachy必定在我们post的Runnable之前。笔者尝试分析一下源码这种做法是否安全,但因为较为复杂,所以目前还没法得出结论。下面介绍的方法相对靠谱些。
第二种:
view.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
System.out.println(view.getMeasuredHeight());
}
});
- 大小: 140 KB
分享到:
相关推荐
Android-android-tips-tricks.zip,[备忘]android开发的技巧,安卓系统是谷歌在2008年设计和制造的。操作系统主要写在爪哇,C和C 的核心组件。它是在linux内核之上构建的,具有安全性优势。
5. **《Android App Performance: Tips & Tricks》** 作者:Reto Meier 这本书专注于Android应用的性能优化,提供了许多实用的技巧和建议,帮助开发者创建高效、流畅的应用。 6. **《Head First Android ...
This book is an outgrowth of a 1996 NIPS workshop called Tricks of the Trade whose goal was to begin the process of gathering and documenting these tricks. The interest that the workshop generated, ...
《Python Tricks》这本书是Python开发者的一本宝贵资源,它深入浅出地讲解了Python编程中的高级技巧和最佳实践。作者的目标是帮助读者更好地理解和运用Python,无论你是初学者还是有经验的开发者,都能从中受益匪浅...
根据给定文件的信息,我们可以总结出一系列与Microsoft Office 2007相关的实用技巧和知识点。下面将逐一介绍这些技巧,主要包括Word、Excel、PowerPoint、Outlook以及Access的应用技巧。 ### Microsoft Word Tricks...
其中,“Quite a Box of Tricks 1.6汉化版”是一款功能强大的PDF工具,它为用户提供了一系列高级功能,使得PDF文件的管理和编辑变得更加便捷高效。 首先,此插件的一大亮点是其图像压缩功能。在处理包含大量图片的...
《Python Tricks》不仅仅是一本普通的编程指南,它更像是一个Python特性的宝库,其中包含了各种实用且高效的编程技巧。这些技巧可以帮助开发者在日常工作中编写出更加简洁、优雅且高效的代码。 #### 核心知识点概览...
PDF 插件 Quite A Box Of Tricks 是一个专为优化PDF阅读和编辑体验而设计的强大工具。这个插件提供了许多高级功能,使得用户可以更灵活、更高效地处理PDF文档。在“任意角度缩放”这一特性中,我们可以看到它不仅...
"Quite a Box of Tricks 1.8" 是一个软件集合,旨在为用户提供一系列实用工具,以增强其计算机体验。这个版本特别强调了对PDF文件的支持,因此我们可以推断它包含了一个PDF插件。PDF插件是用于浏览器或其他应用程序...
《Python Tricks Buffet: Awesome Features》是一本深入探讨Python编程技巧和强大特性的书籍,旨在帮助程序员提升Python编程效率和代码质量。这本书涵盖了多种Python语言的精华,包括但不限于元编程、高级数据结构、...
一些很不错的Android开发技巧,这个项目翻译自 android-tips-tricks 去掉了一些我认为不重要的,对我使用过的东东做了评价,同时翻译了一些自己没有注意到的知识点的文章。 :heart: star 支持一下 欢迎协作 了解你的...
《ShaderX Vertex and Pixel Shader Tips and Tricks》是一本专注于计算机图形学中着色器技术的专业书籍。本书由Wolfgang F. Engel编辑,由Wordware Publishing, Inc.出版,并获得了美国国会图书馆的编目数据记录。...
在图像分类训练中,提升模型性能的关键因素不仅仅是选择合适的深度学习模型,还包括一系列的数据处理和训练技巧。这些所谓的“tricks”能够显著提高模型的准确率,并且对目标检测和图像分割等计算机视觉任务同样有效...
Scrolling Tricks介绍: 实现滑动视图(ScrollView)中的头部两种滑动效果。一种是向上滑动View时,头部也向上滑动并且消失,当向下滑动时,头部马上出现,所以叫做Quick Return(如效果图1);一种是无论向上或者...
Dave Wilson的"Teaching Old Motors New Tricks"课程深入浅出地介绍了这一先进控制策略,帮助学习者理解并应用FOC于实际电机控制系统中。 **1. FOC的基本原理** FOC的核心思想是将交流电机的定子磁场分解为直轴(d...
ScrollTricks是一个开源控件,实现了两个简单功能: 1、Quick Return:向上滑动时,View也向上滑动并且消失,当向下滑动时,View马上出现。例如Google Now的搜索功能。 2、Sticky:类似的同步滚动,特定的View最多...
Neural Networks: Tricks of the Trade, Second Edition Editors: Grégoire Montavon, Geneviève B. Orr, Klaus-Robert Müller 有关神经网络、深度学习Tricks的入门经典书籍。
标题中的“CTF技巧集合 tricks”指的是Capture The Flag(CTF)比赛中的技巧和方法的集合。CTF是一种信息安全竞赛,通常包含多种挑战,涉及计算机安全领域的各个方面。这场比赛能够帮助参与者快速学习并积累安全知识...
资源来自pypi官网。 资源全名:json_tricks-3.13.4-py2.py3-none-any.whl