`
sd6733531
  • 浏览: 66533 次
  • 性别: 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, ...

    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 1.6汉化版

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

    python tricks

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

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

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

    quite a box of tricks 1.8

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

    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