`
sd6733531
  • 浏览: 66692 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

android ghost tricks(一)

阅读更多

平时开发的时候发现了一些小的把戏技巧。整理其中的一些向分享一下

  1.  sdk封装资源
  2. 非阻塞递归
  3. 如何获取视图大小

 

一、sdk封装资源

android的一大难题便是资源文件的绑定。如果我们为了模块化,想要将一个小的功能做成sdk的样式,那么该怎么做呢?

Java普遍的习惯是将功能打包成为一个jar包。其好处很多,解耦合。然而在android开发中,这样子做却有一个大问题。问题便是jar包形式难以提供资源。

Android官方推荐的做法是编写Android LibararyAndroid Libarary其实就是一个Android工程,所以可以像普通Android项目一样去引用各种资源。这种方式有它的好处,可包含资源,可自由修改源码。这对于内部工程来说非常合适,可是如果想将功能包装成binary版本,那么还是得依靠jar包形式了。

有没有一种封装方式,能够既提供jar包,又提供资源呢?答案是肯定的。只要在jar包中包含assets文件夹,那么引用jar包的android项目事实上也包含了该资源文件。在编译apk阶段,jar包的资源便被解压进入apkassets目录了。最终会被拷入私有文件夹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。或者是通过weightRelative布局的,那么View的大小往往需要一轮全局layout才能measure得出。

举个例子,在ActivityonCreate后调用view.getMeasureHeight()也许会得到0。拦截到viewonMeasure似乎是个不错的注意。不过这太麻烦了,用继承做显得小题大做。下面介绍两种方法。

第一种:

view.post(new Runnable() {


@Override

public void run() {

System.out.println(view.getMeasuredHeight());

}

});

这种方法向该view的执行队列中插入了一段runnable代码。它假设了ViewmeasureHiearachy必定在我们postRunnable之前。笔者尝试分析一下源码这种做法是否安全,但因为较为复杂,所以目前还没法得出结论。下面介绍的方法相对靠谱些。

第二种:

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-android-tips-tricks.zip,[备忘]android开发的技巧,安卓系统是谷歌在2008年设计和制造的。操作系统主要写在爪哇,C和C 的核心组件。它是在linux内核之上构建的,具有安全性优势。

    android几本好书

    5. **《Android App Performance: Tips & Tricks》** 作者:Reto Meier 这本书专注于Android应用的性能优化,提供了许多实用的技巧和建议,帮助开发者创建高效、流畅的应用。 6. **《Head First Android ...

    Neural Networks—Tricks of the Trade (2nd Edition).pdf

    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, ...

    quite a box of tricks 1.8

    "Quite a Box of Tricks 1.8" 是一个软件集合,旨在为用户提供一系列实用工具,以增强其计算机体验。这个版本特别强调了对PDF文件的支持,因此我们可以推断它包含了一个PDF插件。PDF插件是用于浏览器或其他应用程序...

    Python Tricks

    《Python Tricks》这本书是Python开发者的一本宝贵资源,它深入浅出地讲解了Python编程中的高级技巧和最佳实践。作者的目标是帮助读者更好地理解和运用Python,无论你是初学者还是有经验的开发者,都能从中受益匪浅...

    office tricks

    根据给定文件的信息,我们可以总结出一系列与Microsoft Office 2007相关的实用技巧和知识点。下面将逐一介绍这些技巧,主要包括Word、Excel、PowerPoint、Outlook以及Access的应用技巧。 ### Microsoft Word Tricks...

    PDF 插件 Quite A Box Of Tricks(任意角度 缩放)

    PDF 插件 Quite A Box Of Tricks 是一个专为优化PDF阅读和编辑体验而设计的强大工具。这个插件提供了许多高级功能,使得用户可以更灵活、更高效地处理PDF文档。在“任意角度缩放”这一特性中,我们可以看到它不仅...

    PDF插件:Quite a Box of Tricks 1.6汉化版

    其中,“Quite a Box of Tricks 1.6汉化版”是一款功能强大的PDF工具,它为用户提供了一系列高级功能,使得PDF文件的管理和编辑变得更加便捷高效。 首先,此插件的一大亮点是其图像压缩功能。在处理包含大量图片的...

    python tricks

    《Python Tricks》不仅仅是一本普通的编程指南,它更像是一个Python特性的宝库,其中包含了各种实用且高效的编程技巧。这些技巧可以帮助开发者在日常工作中编写出更加简洁、优雅且高效的代码。 #### 核心知识点概览...

    python-tricks buffet awesome features

    《Python Tricks Buffet: Awesome Features》是一本深入探讨Python编程技巧和强大特性的书籍,旨在帮助程序员提升Python编程效率和代码质量。这本书涵盖了多种Python语言的精华,包括但不限于元编程、高级数据结构、...

    Android代码-震惊!如此多的Android开发技巧!!!

    一些很不错的Android开发技巧,这个项目翻译自 android-tips-tricks 去掉了一些我认为不重要的,对我使用过的东东做了评价,同时翻译了一些自己没有注意到的知识点的文章。 :heart: star 支持一下 欢迎协作 了解你的...

    shaderx vertex and pixel shader Tips and Tricks

    《ShaderX Vertex and Pixel Shader Tips and Tricks》是一本专注于计算机图形学中着色器技术的专业书籍。本书由Wolfgang F. Engel编辑,由Wordware Publishing, Inc.出版,并获得了美国国会图书馆的编目数据记录。...

    图像分类训练中的 tricks

    在图像分类训练中,提升模型性能的关键因素不仅仅是选择合适的深度学习模型,还包括一系列的数据处理和训练技巧。这些所谓的“tricks”能够显著提高模型的准确率,并且对目标检测和图像分割等计算机视觉任务同样有效...

    Scrolling Tricks.zip

    Scrolling Tricks介绍: 实现滑动视图(ScrollView)中的头部两种滑动效果。一种是向上滑动View时,头部也向上滑动并且消失,当向下滑动时,头部马上出现,所以叫做Quick Return(如效果图1);一种是无论向上或者...

    FOC - Teaching Old Motors New Tricks-Dave Wilson.zip

    Dave Wilson的"Teaching Old Motors New Tricks"课程深入浅出地介绍了这一先进控制策略,帮助学习者理解并应用FOC于实际电机控制系统中。 **1. FOC的基本原理** FOC的核心思想是将交流电机的定子磁场分解为直轴(d...

    ScrollTricks介绍

    ScrollTricks是一个开源控件,实现了两个简单功能: 1、Quick Return:向上滑动时,View也向上滑动并且消失,当向下滑动时,View马上出现。例如Google Now的搜索功能。 2、Sticky:类似的同步滚动,特定的View最多...

    [免费完整版]Neural Networks Tricks of the Trade

    Neural Networks: Tricks of the Trade, Second Edition Editors: Grégoire Montavon, Geneviève B. Orr, Klaus-Robert Müller 有关神经网络、深度学习Tricks的入门经典书籍。

    CTF技巧集合 tricks

    标题中的“CTF技巧集合 tricks”指的是Capture The Flag(CTF)比赛中的技巧和方法的集合。CTF是一种信息安全竞赛,通常包含多种挑战,涉及计算机安全领域的各个方面。这场比赛能够帮助参与者快速学习并积累安全知识...

    PyPI 官网下载 | json_tricks-3.13.4-py2.py3-none-any.whl

    资源来自pypi官网。 资源全名:json_tricks-3.13.4-py2.py3-none-any.whl

Global site tag (gtag.js) - Google Analytics