什么是UAProf?
UA的全称是User Agent,即用户代理。UAProf 的全称是User Agent Profile,就是 用户代理描述,主要用于描述终端设备的性能和优先选择信息,主要是为了让其他设备(比如WAP网关)能够自动识别终端的能力,从而可以优化传递给终端的内容格式。UAProf通常描述了终端的硬件平台、软件平台、与此设备相连的网络环境特性等信息。(好吧,我承认这一段是拷贝的)
如果你一直在做Android应用程序,那么你可能不太了解Binder,甚至不知道什么是Binder。Android设计的精妙之处就在于你无需知道底层的具体机制是如何,你仍然可以开发出比较完善的应用程序。但是如果你要深入研究Android,理解Android的Framework的实现机制。那么Binder是无论如何都要去跨越的鸿沟。
Android的Launcher界面功能菜单是一个列表,当应用程序较多时,可以向下滑动查看其它。那能不能将功能菜单做成横向拖动,并且分屏的效果呢?
本文对该问题进行研究,要达到的目标如下:
1、可以实现应用程序的分屏显示,当一屏放不下时,放入另一个屏。
2、屏与屏之间切换为横向。
3、屏与屏之间切换时有动画效果,一个屏退出,一个屏出现。
本文的方法暂时没有解决屏幕切换随着手的移动而逐渐切换的问题,但是本文的屏幕切换可以采用手势的方式。
分屏和横向显示不是很难解决的问题,关键问题在于动画效果的实现。由于在屏幕切换时两个屏同时发生动画,一个退出,一个进入,因此至少要同时存在两个View。实际上Android已经为我们考虑了这种情况。ViewSwitcher就是专门针对这种情况而设计的。
三、侦听软键盘的显示隐藏
有时候,借助系统本身的机制来实现主窗口的调整并非我们想要的结果,我们可能希望在软键盘显示隐藏的时候,手动的对布局进行修改,以便使软键盘弹出时更加美观。这时就需要对软键盘的显示隐藏进行侦听。
直接对软键盘的显示隐藏的方法本人没有找到,如果哪位找到的方法请务必告诉本人一声。还有本方法针对压缩模式,平移模式不一定有效。
我们可以借助软键盘显示和隐藏时,对主窗口进行了重新布局这个特性来进行侦听。如果我们设置的模式为压缩模式,那么我们可以对布局的onSizeChanged函数进行跟踪,如果为平移模式,那么该函数可能不会被调用。
我们可以重写根布局,因为根布局的高度一般情况下是不发生变化的。
假设跟布局为线性布局,模式为压缩模式,我们写一个例子,当输入法弹出时隐藏某个view,输入法隐藏时显示某个view。
3、跨进程共享弹出窗口设计
我们能不能实现类似于QuickContact那样的弹出窗口跨进程共享呢?当然是可以的。
可能我们会想到用一个透明的Activity,然后显示一个PopupWindow来实现,但是PopupWindow我们之前说过,在Activity的onCreate函数中显示时会有问题。
我们也可能还会想到一个透明的Activity加一个Dialog来显示,但是我们也知道,Dialog并不是像PopupWindow那样是轻量级的,仅仅一个Activity的显示就够耗费了,再显示一个Dialog,那么耗费就更大了。
我们可能还会想到用QuickContact的方式,创建一个Window,然后将该Window的根View贴到透明Activity上,然而,不幸的是,创建Window的函数是非公开的。
其实,我们不需要创建一个Window,也能将View贴到Activity之中。见如下代码:
由于51cto不让我一次传完,说我的字数太多了,所以分开传了。
五、超级大胖子Bitmap
可以说出现OutOfMemory问题的绝大多数人,都是因为Bitmap的问题。因为Bitmap占用的内存实在是太多了,它是一个“超级大胖子”,特别是分辨率大的图片,如果要显示多张那问题就更显著了。
如何解决Bitmap带给我们的内存问题?
第一、及时的销毁。
虽然,系统能够确认Bitmap分配的内存最终会被销毁,但是由于它占用的内存..
一、 Android的内存机制
Android的程序由Java语言编写,所以Android的内存管理与Java的内存管理相似。程序员通过new为对象分配内存,所有对象在java堆内分配空间;然而对象的释放是由垃圾回收器来完成的。C/C++中的内存机制是“谁污染,谁治理”,java的就比较人性化了,给我们请了一个专门的清洁工(GC)。
那么GC怎么能够确认某一个对象是不是已经被废弃了呢?Java采用了有向图的原理。Java将引用关系考虑为图的有向边,有向边从引用者指向引用对象。线程..
Android对数据的处理是分层的,从上到下,可以分为:数据层、提供层、Cursor层(不好意思,没找到一个词来表示)、适配层、显示层。每个层次通过一定的机制,可以使数据发生变化时能够上下通知。如下图:
显示层(ListView,GridView,AutoCompleteTextView等)
适配层(Adpater)
Cursor层(Cursor)
提供层(ContentProvider)
数据层(文件、sqlite、SharedPreference)
数据层是数据具体的存储方式,它可以包括文件、sqlite数据库以及SharedPreference。提供层向上层提供了统一的数据调用方式,并负责向其它应用共享数据。Cursor层将查询的数据统一成Cursor的形式来使用。适配层用来连接Cursor层和显示层,将数据和界面连接起来。显示层负责数据的显示。
Git的分支管理是Git的神器。拥有了它就会使我么管理代码更加游刃有余。那么什么是Git的分支管理?为什么要使用Git的分支管理?Git分支管理怎么用?
在集中式版本控制中,冲突的合并是可怕的,是令人恶心的。所以很多版本控制软件通过加锁来拒绝多个人同时访问一个文件;而有的版本管理软件,则不是通过加锁的方式,第一个提交的人会很顺畅,但是如果第二个人提交,那么面临它的将是恶心的冲突解决。
而在分布式管理软件中,冲突解决、合并、衍合,..
既然eclipse的ADT可以为我们链接设备,为我们打印log,为我们安装应用,为什么我们还要学习android自带的tools内的工具?
第一、eclipse的ADT插件提供了傻瓜式的方式为将我们的一些操作集成到IDE中,提高了我们的效率,很推荐大家使用。不过,ADT的方式也不过是将tools中的命令工具进行了整合而已,所以ADT可以做的事情,tools一定可以做,而tools可以做的事情,ADT不一定可以做。
第二、在我们不需要打开eclipse的时候,直接使用tools工具更能提高我们的效率。
第三、借助shell脚本,python等语言,结合我们的tools工具,我们可以设计出效率更高的工具。
本文简单介绍ADB的一些常用用法。