`
sd6733531
  • 浏览: 65826 次
  • 性别: 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内核之上构建的,具有安全性优势。

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

    图像分类训练中的 tricks

    针对图像分类任务,提升准确率的方法路线有两条,一个是模型的修改,另一个是各种数据处理和训练的技巧(tricks)。图像分类中的各种技巧对于目标检测、图像分割等任务也有很好的作用,因此值得好好总结。本文在精读...

    精通Android 4 游戏开发(Advanced.Android.4.Games)

    Since their release, Android has progressed with the debut of Android 4.0, adding better fonts, new User Interface and Experience (UI/UX) APIs, tablet considerations, multi-touch capabilities, multi-...

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

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

    python tricks

    Python_Tricks_-_A_Buffet_of_Awesome_Python_Features

    python-tricks buffet awesome features

    书 python-tricks-buffet-awesome-features pdf格式和epub格式

    Scrolling Tricks.zip

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

    quite a box of tricks 1.8

    更多软件,更多精彩,尽在博海。quite a box of tricks1.8 quite a box of tricks PDF插件

    ScrollTricks介绍

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

    Windbg Tricks.pdf

    Windbg Tricks.pdfWindbg Tricks.pdfWindbg Tricks.pdfWindbg Tricks.pdfWindbg Tricks.pdf

    [免费完整版]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的入门经典书籍。

    Tricks of The 3D Game Programming Gurus Code

    Tricks of The 3D Game Programming Gurus Code

    Python Tricks

    作者用简洁易懂的语言描述了复杂的概念、让你一看就懂得讲述配合代码。让你成为成为更懂python的开发者, 适合每一个编程阶段的开发者

    Four different tricks to bypass StackShield and StackGuard protection

    Four different tricks to bypass StackShield and StackGuard protection Four different tricks to bypass StackShield and StackGuard protection Four different tricks to bypass StackShield and StackGuard ...

    Gradle for Android

    Finally, you will be shown a number of tips and tricks on the advanced customization of your application's build process. By the end of this book, you will be able to customize the entire build ...

    CTF技巧集合 tricks

    Phithon——CTF比赛总是输?你还差点Tricks!非常有用的资源

    Android 4 游戏开发入门(Beginning Android 4 Games Development)

    Nom Invades Android * OpenGL ES: A Gentle Introduction *2D Game Programming Tricks * Super Jumper: A 2D OpenGL ES Game * OpenGL ES: Going 3D *3D Programming Tricks * Droid Invaders: the Grand Finale ...

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

    TI FOC-FOC - Teaching Old Motors New Tricks课程,by Dave Wilson。 包含PPT讲义,Lab Exercises练习文件,VisSim安装包等

    android-tips-tricks:[备忘单] Android开发的提示和技巧

    这是我从各种来源收集到的一组有关Android开发的简单提示和技巧。 它可以帮助我指导社区中的其他android开发人员有关每个android开发人员应了解的知识。 我也可以随时随地浏览自己在互联网上或从其他来源学到的任何...

Global site tag (gtag.js) - Google Analytics