任何问题请联系WX:uu16853

买模板送网站采集器 让你轻松放开双手运营网站!

购买更多有优惠!

Android开发知识-3月13日总结 Android开发技术

   来自国内外的Android开发相关知识总结,整理于2011年3月13日。   1. NDK开发使用什么IDE比较好? 这里Android123推荐使用Visual Studio 2005或更高版本,对于代码管理和显示效果比较出色。   2. SurfaceView如何截图 ? 使用Linux下标准的Framebuffer无法获取是一片黑色,类似Windows下截取DirectX这样的DMA模式的数据一样,由于SurfaceView在游戏或高实时性画面比较多,Android除了从2.3.3开始新增了一个SurfaceFlinger API用于截图.当然有关OpenGL的截图还可以查看android开发网早期文章,如果你有Root权限截图普通图片通过读取/dev/graphics/fb0即可。   3. Android模拟器和真机到底性能差异多少? 这里Android开发网提示,模拟器的性能和PC的CPU、RAM有很大的关系,同时默认的模拟器启动时分配的RAM较小,而真机也分为很多层次,比如CPU从ARM11这样单核频率在550MHz左右,也有效率更高的A8、A9双核的,同时真机的RAM也是从256MB到1GB不等,对于实际性能差距mTweak评估可能造成10倍或更高的效率差别。   4. android开发时项目的包名管理和代码风格,一般考虑到设计模式,这里android123推荐大家有ui、view、service、provider、util、network以及常量const包,对于Java工程的管理和代码优雅性大家应该多参考优秀的开源工程,比如Android自带的apps的代码,看一些设计模式对于项目管理控制都有很大的帮助,尤其是模块化的开发。   5. 跨进程的数据传输,如果是几个应用协同处理需要跨进程,对于Android平台来说设计一个AIDL服务器比较方便,类似系统的很多服务都是通过getSystemService这样的方式访问server来处理在代码可复用上面和通讯上,类似微软的COM模型,开发者无需关注内部实现曝露出通用的接口即可。

Android开发之设置断点单步调试 Android开发技术

  Android平台的开发过程中,可能我需要使用到Java常规的设置断点,单步跟踪每个变量,相对于Android ADT独有的Logcat、TraceView以及DDMS中的其他一些工具而言,设置断点检查每个变量的运行输出更适合一些大型项目的排错,或状态检测,作为Java开发中不可缺少的调试方法,在Android项目中可以通过Eclipse IDE的在某行前面单击鼠标右键,选择Toggle Breakpoint来下断点,而Disable Breakpoint或Remove Breakpoint来禁用或移除断点,具体操作如图所示:    在下断点的运行,Android123提示大家,必须通过Debug方式才行,标准的Run是针对最终的release版本而设计的,要想单步跟踪,这里Android开发网给出两种方法,第一种可以在Eclipse中单击Debug这个小虫子按钮,选择你要调试的应用。   而第二种,在你的Package Explorer中对着工程名右击鼠标,在弹出的菜单中选择Debug As,Android Application,这样既可,如下图所示:

Android开发之Java基础系列教程目录 Android开发技术

   对于越来越多的开发者加入Android开发行列,Android123决定推出Java基础系列教程,让大家打牢Java基础,主要我们以Java的虚拟机原理、Java集合类以及Java设计模式这三方面,让C/Objective-C/C++/Symbian C++以及Visual C++开发者轻松掌握Java语言特性和易错点。   一、Java虚拟机原理、内存分配   二、Java集合类和数据结构类   三、Java设计模式和面向对象   如果你过去从没有系统的学习过Java,Android开发网强烈建议关注我们今后的系列教程,最重要的是完全免费,好学易懂。

Android开发之Java虚拟机原理和内存分配 Android开发技术

   开发出高效稳定的Android应用我们不得不需要了解下Java虚拟机的原理和内存分配机制,Android使用的是Google经过优化的Dalvik Java VM。通常情况下Java编译过的代码是一些class文件,通过Java VM的类解析器分析、效验后执行。Java语言和C/C++有着本质区别的就是内存管理上,Java VM有一个垃圾收集清理器GC可以自动的回收内存。   Java虚拟机在执行代码的时候,首先解析Class,查找该类的方法、常量,这些对于常规情况下都编译成二进制的代码保存在jar文件中,而对于Java的反射,VM的类加载器需要动态的查找这些类名,虽然节省了编译时间,但是运行时的查找大大降低运行效率。   对于Android应用来说,手机的RAM相对于PC还小了很多,同时电脑上的主流应用使用的是Visual C++编写,所以对于手机上已经不占优势的硬件来讲使用Java这样的内存大户语言必须严格的了解内存释放有助于提高程序的性能。对于Android的内存释放情况,大家可以在DDMS中的Logcat中看到类似  08:10:18.895: DEBUG/dalvikvm(1281): GC freed 38611 objects / 2097960 bytes in 182ms 这样的语句。可以大概了解你的应用的对象回收情况,如图     Android应用通常情况的运行的RAM占用在20MB左右,对于程序美工我们尽量用代码绘制方式实现,而不是贴图。下面我们一起看下有关内存的使用跟踪: 首先我们在Eclipse的DDMS中找到Devices设备管理,选择需要查看的进程,单击上方的Update head那个绿色的按钮,然后切换到Heap页面,单击Cause GC按钮即可,如图   如果你在左边找不到你应用的进程,可以先在手机上运行你的软件之后即可,同时上面的Update Heap按钮不要忘记,上图中标记为红色的一个都不能少。

Android开发之Java集合类性能分析 Android开发技术

   对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List、Set和Map这三大类的集合,今天Android123就他们的子类在标准情况和多线程下的性能做简单的分析。   Collection接口主要有两种子类分别为List和Set,区别主要是List保存的对象可以重复,而Set不可以重复,而Map一般为key-value这样的对应关系,比如我们常用的HashMap。   一、List 主要有ArrayList、LinkedList、Vector和Stack   有关这些子类的性能,Android开发网从插入、删除、移动等方面按照元素的执行效率做一一分析,通过分析Sun 的Java源码和实际元素操作得出下面结论:   ArrayList – 他的构造主要从AbstractList实现,主要是判断下初始元素的容量,ArrayList最大的特点就是提供了Add、Get操作,当然可以通过迭代器来遍历,对于元素的存在可以通过contains方法判断。   LinkedList – 作为一种双向链表结构,对于元素的插入、删除效率比较高,只需要调整节点指向即可,但是对于随机查找而言性能主要看这个链表长度和运气了。LinkedList也提供了ArrayList的get方法,但是要复杂的多,主要通过next或previous方法遍历得到。   Vector – 比较简单和ArrayList差不多,主要是内部实现了synchronized关键字,实现了线程安全访问但性能有些降低,同时对于元素的扩充在算法上和ArrayList稍有不同,通过构造的容量增量系数来决定。   Stack – 作为栈的操作,本次继承于Vector,提供了push,pop和peek方法,peek是不弹出根据数据大小获取最后一个元素对象。   二、Set 主要有HashSet 和 TreeSet   HashSet – 该类是从Set接口继承而来,相对于List而言就是说内部添加的元素不能重复,当然从名字的Hash来看就是通过哈希算法来实现防止冲突来获得防止重复的,整体上从HashMap实现,存放元素方法的也是类似key- value的对应的,通过迭代器遍历,不过HashSet不是线程安全的。   TreeSet – 这个相对于HashSet而言主要是提供了排序支持,TreeSet是从TreeMap类实现,也是非线程安全的。   可以看到Set的两个类都和Map有关,下面就一起看下有关映射(Map)相关的使用。   三、Map 主要有 HashMap 和 TreeMap   HashMap – 提供了比较强大的功能实现,比如说loadFactor可以控制元素增长时内存分配,HashMap也是非线程安全的。   TreeMap – 相对于HashMap它的排序可以通过传入包含comparator的属性来控制。 […]

Android开发之Java并发包集合类性能分析 Android开发技术

  上一次我们主要分析了Java集合类在单线程和多线程下的性能 Android开发之Java集合类性能分析,今天Android123就并发包concurrent库中的集合类性能做简单的评估分析。   并发包java.util.concurrent库是JDK 1.5中加入的,Android可以很好的支持,在线程的控制和同步管理方面比Thread有更好的表现,就其中的ConcurrentHashMap、CopyOnWriteArrayList、CopyOnWriteArraySet以及ArrayBlockingQueue和前面的HashMap、ListArray、Set以及Queue最简单的性能对比在多线程下。   一、ConcurrentHashMap是线程安全版的HashMap,它的构造同样有initialCapacity和loadFactor系数属性,但是还多了一个concurrentcyLevel,默认空构造方法下,这三个值为16、0.75和16。在ConcurrentHashMap内部并不是通过synchronized实现同步的,如果传入的对象value为null将会抛出空指针异常,而防止冲突仍然使用java Object类的hashcode方法实现的。   1) 单线程下,100个元素   ConcurrentHashMap 的添加效率远差于 HashMap,不过整体一般的应用几乎感觉不到。   2) 多线程下,100个元素   在10个线程下它们两个的性能差不多,不过这时候ConcurrentHashMap性能已经超越了HashMap无论元素多少,而随着线程数的增加效率提升明显,不过对于Android手机这样的应用,应用超过10个线程可能不是很多,不过对于Java VM而言,并发包在多线程下性能优势明显,强烈推荐。   二、CopyOnWriteArrayList是一个线程安全版的ArrayList,但在读取元素时CopyOnWriteArrayList是无锁的,通过这点可以看出它的内部并不是简单实用synchronized关键字实现加锁的,对于并发包来说内部使用了ReentrantLock实现线程安全访问的。对于元素增加来说CopyOnWriteArrayList的新内存分配是通过创建一个比原始大1的缓冲区,将老的数据复制到新的缓冲区,新增的元素加到数组尾部实现元素添加的。删除时也是通过ReentrantLock实现的,比ArrayList的删除操作复杂一些,首先创建一个比当前数组元素少1的缓冲区,然后复制现有的数组到缓冲区,但复制的过程中比现有的数组少1,和添加元素正好相反。Android开发网提示大家CopyOnWriteArrayList使用的添加和删除并不是类似ArrayList那样简单的System.arrayCopy,所以性能上肯定和ArrayList有些出入。   1) 单线程下,100个元素   CopyOnWriteArrayList在元素添加、删除时比ArrayList慢了近一倍,但查找性能没有多大变化,但是随着元素的增加,在单线程下CopyOnWriteArrayList效率大不如ArrayList,在元素数量达到100以后时。  2) 多线程下,100个元素   这里Android123主要测试手机上可能发生的10个线程,这样环境下CopyOnWriteArrayList的添加和删除效率也是远不如ArrayList,但查找效率已经快于ArrayList,当元素增加到10000个时,他们的添加和删除效率相当,但CopyOnWriteArrayList的查找效率远大于ArrayList。   三、CopyOnWriteArraySet 是基于CopyOnWriteArrayList的,由于Set机制不允许重复,所以CopyOnWriteArraySet的add方法在处理元素添加时,调用CopyOnWriteArrayList内部的addIfAbsent方法,如果存在了则返回,不过仍然效率不是很理想。在添加时由于做了额外的操作,所以再添加时比CopyOnWriteArrayList慢,其他和CopyOnWriteArrayList相同。   四、ArrayBlockingQueue 从名字来看就知道是一个队列,不过属于FIFO的线程安全队列,结构类似栈。

Android开发之Java设计模式 Android开发技术

  对于很多C/C++程序员初入Android开发来说,如果你没有认证学习过Java的设计模式,不理解托管语言的OOP设计方法,可能你的应用变得很结构化,对于项目管理、架构扩展来说将会存在很多问题,Android123参看了目前国内很多应用发现很多代码完全就不是一个Java程序员写出来的,虽然能用但是这样设计对于日后的维护等方面将会有很严重的问题.   目前注明的主要有23种设计模式,就常规的Java设计模式Android开发网给大家应该掌握的主要有以下:   一、创建型模式   1. 工厂方法模式   2. 单例模式   3. 生成器模式  二、行为型模式   1. 迭代器模式   2. 责任链模式   3. 观察者模式   4. 模板方法模式  三、结构型模式   1. 代理模式    2. 外观模式   由于设计模式讲解较费时,具体的Android123分多个章节具体描述,同时希望初入Java开发的网友先深刻了解下Java的抽象类、接口和继承相关的问题,以便理解今后相关的内容。

Android开发之Java设计模式入门篇 Android开发技术

   有关Android开发相关的Java基础系列之设计模式入门篇,Android123帮助一些初入Java语言开发的程序员补充些常识性问题,可以帮助C/C++程序员少走些弯路。   1. 抽象类 – 在一个类的前面有abstract关键字,一般描述些公共属性,没有具体对象概念,比如    abstract class Android123 {     }    2. 最终类 – 在一个类前面有final关键词,这样的类无法再被派生,没有子类,需要注意的是abstract和final不能同时出现在一个类中。final修饰的类为:    final class Android123 {     }    3. 接口 – 接口关键字interface,特点就是不能用new去实例化,同时C++和Java语言有本质不同,C++支持多重继承,可以继承多个父类,而Java只能集成一种类型的父类,定义方法如下:    public interface Android123() {    }    4. 抽象类和接口的区别    Java接口和Java抽象类表示的都比较抽象,接口只能是抽象和公开的,不能有构造器,也就是上面提到的不能被实例化,比如 public abstract class Android123() {        public void CWJ() {          //dosomething    这里可以写具体的实现方法        } […]

Android开发之Java设计模式基础篇 Android开发技术

   今天我们就Android开发中的一些设计模式做一些基础性的掌握,在上一次的 Android开发之Java设计模式入门篇 中我们提到了一些有关 Java基础内容,本次就Android项目的架构设计相关内容做分析:   1. 静态工厂方法    静态工厂方法可以算是工厂方法加单例模式的整合在Android平台上,由于Android的Context可以很好的传递实例,静态工厂方法可以提到传统的类构造器,对于一些逻辑的服务提供类可以考虑这样的设计,比如文件下载、图片裁剪等操作。   2. Java的类访问权限    对于程序的可靠性而言,成员变量尽量私有,通过暴漏公开的方法来访问这些私有成员,提供类似getXXX和setXXX这样的方法,不仅是Java,这点C#对于属性的操作概念在Dot Net上已经深入人心,好处就是可以阻止继承后的访问换乱问题。   3. 使用枚举替代常量    Java在JDK 1.5开始加入了enum枚举类,相对于常规的final int这样的定义一些常量更简单安全,毕竟常量是一堆类似整形的数值,打印起来没有过多的意义,枚举对于继承后访问的清晰度可以很好的杜绝隐患发生。   4. 使用列表优先于数组   Java的集合类很方便,使用List类的列表在开销上比Object [ ] 这样的数组大,但是对于泛型的支持而言更好用强大。也可以避免一些不必要的错误,比如   cwjObject [] obj= new int[1];   obj[1] = "android开发网测试"; //这样会在运行时抛出类似ArrayStoreException这样的异常。   而使用列表则为:   List<cwjObject> obj=new ArrayList<int>();  obj.add("android123测试"); // 由于传入列表的是字符串,和构造时类型的int不同,在编译时就提示错误,可以避免一些不必要的情况发生。   5. Java的foreach代替for   Java的foreach仍然使用for来写,这点和C#直接用foreach关键字有点不同,但是使用方法是一样的,除了更简洁外,其实foreach比传统的for更加优化,比如传统的for第二个限制位,一般访问属性或方法,比如说   […]

Android开发易错点总结 Android开发技术

  对于Android程序员来说平时开发Android应用很多地方需要我们注意,下面是Android123通过浏览大部分源码易的地方。   一、数据库的Cursor    对于Android SQLite数据库封装的查询返回对象Cursor来说比较容易出错的有   1. Cursor返回可能为null    如果query返回的Cursor对象为空,执行cursor的任何方法肯定有空指针异常了,这点Android的代码有40%都没有注意到。   2. Cursor返回为0    我们仅仅判断不为空还不行,如果Cursor的对象为0,执行了moveToFirst(); 这样的方法就比较尴尬了,这点Android开发网格外提示大家注意。   3. 遍历Cursor时没有执行moveToFirst(),这样游标的位置就不确定了。   4. Cursor使用完后要手动关闭,cursor.close()这个方法不要忘记了。   5. Cursor的类型获取,比如说getInt和getLong,由于在SQLite中boolean和long型均为SQLite的Integer所以,读取时一定记住转换。  二、新建的service、activity没有在androidmanifest.xml中注册,对于activity还好说,如果是service同时service使用的package name和主程序的package name有出入还记得手动写上相对的包名  三、Parcelable使用时内部类的异常处理,比如内部存储Bitmap对象时,如果Bitmap对象为空就会出现问题了。  有关更多的常见Android开发易错点,Android123会不断完善和总结。

Android开发做哪方面好? Android开发技术

  很多网友转型Android开发或准备做一个Android开发者,到底做哪方面的好呢? 下面是Android123给大家的一些建议:   1. 过去是J2EE、J2SE的开发者,这类传统的Java开发者可以考虑继续做Android应用开发,如果会SSH,可以做更好的服务性客户端等等。   2. 过去时J2ME的开发者,大部分可能都是做游戏出身的,考虑Android游戏开发相对比较理想。   3.  过去是C\C++程序员或有些基础,可以考虑Android应用开发,熟悉后可以做一些更深入的应用通过NDK,Android NDKr5还对STL部分特性做了支持,比较实用。   4. 过去是WinCE、Maemo或硬件相关的,可以考虑ROM定制,移植方面的,对于Android Framework层的学习是主要的。   5. 过去搞硬件的、单片机的可以试试Android ADK,有关ADK是什么Android开发网在以前的文章中介绍过,可以做出一些硬件配件来。   到底是做应用薪水高还是底层呢? 这里Android123就形势而言应用挂广告,尤其是游戏效果会远比做底层和内核的好,国内较著名的愤怒的小鸟就是一个比较典型的例子,相对而言用户看到的是应用,做底层的只能比较低调了,但做一款内核级的应用还是不错的。

Android开发用的平板电脑推荐 Android开发技术

  随着Android honeycomb的普及,对于Android开发用的平板电脑购买也是十分必要的,到底哪款平板适合开发使用呢?  一、硬件方面   CPU最好是主流的NVIDIA Tegra2 A9双核1GHz,RAM为1GB,分辨率为WXGA即1280×800,运行的系统至少为Android 3.0。对于非谷歌官方的Android 2.x系统可以忽略,毕竟很多API是3.0才开始有的。  二、选购品牌   品牌过硬,最好是一线的大厂,由于和Google合作紧密,得到Android最新版代码和研发效率等因素要好很多,知名品牌的固件升级有保障。 目前摩托罗拉的Xoom已经有Android 3.1固件了,三星Galaxy Tab 10.1也将会在近期上市,而Acer A500和ASUS TF101由于存在国行升级固件相对较慢,建议购买台版、港行或欧美的这两个厂商表示本月推出Android 3.1固件。  三、经济问题  目前Android 3.0平板价格分为两个档次,比较有意思的是这两个档次是不同领域的制造商  1. 5000元左右的  手机制造商: 摩托罗拉Xoom、三星Galaxy Tab 10.1和LG Optimus Pad  2. 3500元左右的 笔记本制造商 华硕Eee Pad Transformer、宏碁Iconia Tab A500   从上面来看台湾的厂商价格比较亲民,由于华硕和宏碁拥有多年的笔记本电脑和PC制造工艺,设计平板走线拥有丰富的经验,同时硬件配置上丝毫不逊色于欧美厂商。

Android开发知识点总结 Android开发技术

  1. 如何让你的应用优先安装到SD卡上?    从Android 2.2 SDK开始多出了一个属性在AndroidManifest.xml中,在manifest节点加入android:installLocation="preferExternal"即可,当然要想让你的应用真正的安装到SD卡上,用户最终的固件为2.2,同时用户选择安装时在SD卡上。一般只有大型游戏或非重要的系统级应用选择安装在SD卡上,SD卡的读写要慢于ROM且更费电,所以重要的应用,比如闹铃提醒是不能设置安装到SD卡的。   2. 如何防止Service被系统回收?   对于Service被系统回收,一般做法是通过提高优先级可以解决,在AndroidManifest.xml文件中对于intent-filter可以通过android:priority = "1000"这个属性设置最高优先级,1000是最高值,如果数字越小则优先级越低,同时实用于广播,而Android123推荐大家如果你的应用很重要,可以考虑通过系统常用intent action来触发。   3.  Android NDK本地应用效率提升方法   对于C/C++的应用,这里Android开发网提示按照C++的习惯,简单反复调用的函数可以声明为inline,尽量少用虚函数,C++ STL的Stream效率不是很高,vector的内存管理要考虑仅分配不释放问题,如果需要涉及和Java通讯,则JNI的执行开销比较大,同时IPC通讯方法在本地端使用IBinder比较高效,当然如果你的技术不是很过关,Socket也是可以的,也更规范些吧。

ArrayList LinkedList Set HashMap介绍 Android开发技术

  在Android开发中我们经常需要对数据进行分类和操作,对于轻量级的数据存储我们可能不需要动用SQLite或效率以及类库不完善的XML,由于SharedPreferences不具备数据枚举方法,如果仅仅是一个String或Int数组可以通过一个标记分割设计外,我们还是主要来看看Android或者说Java提供的基础数据类型辅助类ArrayList LinkedList Set HashMap的介绍,如果你熟悉C++的STL或Boost库可以略过本文。    在Java中提供了Collection和Map接口。其中List和Set继承了Collection接口;同时用Vector、ArrayList、LinkedList三个类实现List接口,HashSet、TreeSet实现Set接口。直接有HashTable、HashMap、TreeMap实现Map接口。     Vector基于Array的List,性能也就不可能超越Array,并且Vector是“sychronized”的,这个也是Vector和ArrayList的唯一的区别。     ArrayList:同Vector一样是一个基于Array的,但是不同的是ArrayList不是同步的。所以在性能上要比Vector优越一些。Android123提示大家适用于顺序性的查找     LinkedList:不同于前面两种List,它不是基于Array的,作为链表数据结构方式,所以不受Array性能的限制。当对LinkedList做添加,删除动作的时候只要更改nextNode的相关信息就可以实现了所以它适合于进行频繁进行插入和删除操作。这就是LinkedList的优势,当然对于元素的位置获取等方面就逊色很多。     List:         1. 所有的List中只能容纳单个不同类型的对象组成的表,而不是Key-Value键值对。例如:[ tom,1,c ];         2. 所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ];         3. 所有的List中可以有null元素,例如[ tom,null,1 ];         4. 基于Array的List(Vector,ArrayList)适合查询,而LinkedList(链表)适合添加,删除操作。 虽然Set同List都实现了Collection接口,但是他们的实现方式却大不一样。List基本上都是以Array为基础。但是Set则是在HashMap的基础上来实现的,这个就是Set和List的根本区别。      HashSet:HashSet的存储方式是把HashMap中的Key作为Set的对应存储项,HashMap的key是不能有重复的。HashSet能快速定位一个元素,但是放到HashSet中的对象需要实现hashCode()方法0。     TreeSet:将放入其中的元素按序存放,这就要求你放入其中的对象是可排序的。TreeSet不同于HashSet的根本是TreeSet是有序的。它是通过SortedMap来实现的。     Set总结: 1. Set实现的基础是Map(HashMap); 2. Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象,不能包含两个元素e1、e2(e1.equals(e2))。     Map是一种把键对象和值对象进行关联的容器,Map有两种比较常用的实现: HashTable、HashMap和TreeMap。     HashMap也用到了哈希码的算法,以便快速查找一个键,     TreeMap则是对键按序存放,因此它有一些扩展的方法,比如firstKey(),lastKey()等。     HashMap和Hashtable的区别。 […]

Android开发注意点 Part One Android开发技术

     Android已经的很多细节问题我们通过平台开发总结不断完善这个列表,如果你有相关的内容可以联系 android123@163.com .    一、AssetManager – 已知单个文件处理不能大于1MB,所以如果资源很大,建议使用Zip格式压缩存放。    二、ScrollView中嵌入ListView – 这个作法可能会出现你的ListView仅仅显示1行半。    三、Android自带的Zip处理类对文件名编码无法识别,也没有提供显示的设置方法,在zlib中写死了。    四、使用一些资源对象记住关闭,比如对于文件流对象最后           FileOutputStream os = xxx;            try {                //dosomething            } finally {                os.close();  //显示的使用finally关闭文件对象。            }           对于Cursor而言,在移动位置时首先判断Cursor是否为空,最终使用完仍然需要 close方法,如果重用,可以使用deactivate方法释放当前资源,通过requery方法再次查询。   五、SDK中标记为 deprecated 字样的,常规情况下是有更好的方法可以替代,短期内可以放心使用。这些方法一般高版本的SDK都可以向上兼容,目前尚未发现Android放弃某些API的支持。   六、Notification的Intent无法传递到目标的Activity,Service和Broardcast没有测试过,中途需要通过PendingIntent,可能这里出现了问题。

Android开发之模拟按下Home键的效果 Android开发技术

  有网友询问如何实现按下Home键的效果,Android设备在按下Home键会自动切换回桌面,其实实现的方法很简单,由于Launcher捕获了Home键的按下action,我们直接发送个Intent给Launcher即可,    Intent i= new Intent(Intent.ACTION_MAIN);    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //android123提示如果是服务里调用,必须加入new task标识   i.addCategory(Intent.CATEGORY_HOME);   startActivity(i);

反射在Android开发中的利弊 Android开发技术

  由于Android 2.2的推出,很多新的API加入导致很多项目移植需要考虑使用Java的反射机制Reflection来动态调用,动态调用的好处就是不需要使用引用文件,直接通过JDK中声明好的方法直接调用,本身原理基于JVM的,从Java 1.5开始支持,原理上就是根据类名而不实例化对象的情况下,获得对象的方法或属性而直接调用。   Android开发时反射能帮助我们多少?   1. 有些网友可能发现Android的SDK比较封闭,很多敏感的方法常规的用户无法编译,我们如果翻看了代码直接在反射中声明动态调用即可。比如很多internal或I开头的AIDL接口均可以通过反射轻松调用。   2. 反射对于Android123来说更重要的是考虑到应用的兼容性,我们目前主要兼容从Android 1.5到2.2的项目,API Level从3到8可以方便的扩充,调用前我们预留一个标志位声明该API的最低以及最高的API Level为多少可以调用。   3. 对于调试Java的反射是功臣了,在Logcat中我们可以看到出错的地方肯定有类似java.lang.reflect.XXX的字样,这种自检机制可以帮助我们方便的调试Android应用程序。   反射的缺点有哪些?   1. 因为是动态执行的,效率自然没有预编译时引用现有的库效率高,就像平时我们Win32开发时,可以不用h文件,直接通过GetProcAddress一样去动态获取方法的地址。当然效率要根据复杂程度而决定,一般稍微复杂的处理性能损失可能超过20%,对于一些复杂的涉及Java自动类型转换判断,执行时间可能是直接引用的上千倍,所以最终我们调试时必须考虑性能问题。   2. 因为反射是动态的,所以需要处理很多异常,不然Dalvik崩溃出Force Close的概率会大很多,很简单的一个反射就需要至少3个异常捕获,本身try-catch效率就不是很高,自然进一步影响运行效率,对于Android开发我们必须考虑这些问题。   3. 反射因为导致代码臃肿,自然稍微复杂的几个方法实用反射将会导致代码可读性和维护性降低,如果很抽象的调用Android开发网强烈不推荐这种方法。   最后要说的是Reflection并不是Java的专利,微软的.Net也同样支持,同时更多的动态语言如Ruby等均支持这一特性。

Android开发进阶之NIO非阻塞包(四) Android开发技术

   今天我们通过一个实例详细讲解下Android下NIO非阻塞服务器的开发,对于客户端而言Android123不推荐使用NIO,毕竟NIO相对于传统IO较为复杂,最重要的NIO是为了解决多线程并发问题而解决的技术,可能会因为管理和复杂性降低最终的结果,毕竟NIO是Java的,相关的类型比较难控制,对于客户端而言我们可以使用C++、Java、C#甚至Flash Action Script来编写。     下面我们以一个简单的Echo Server为例子来分析  import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.CharBuffer;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.channels.ServerSocketChannel;import java.nio.channels.SocketChannel;import java.nio.charset.Charset;import java.nio.charset.CharsetDecoder;import java.nio.charset.CharsetEncoder;import java.util.Iterator; public class Server {  public static void main(String[] args) {  Selector selector = null;  ServerSocketChannel ssc = null;  try {      selector = Selector.open(); //实例化selector      ssc = ServerSocketChannel.open(); //实例化ServerSocketChannel 对象       ssc.socket().bind(new InetSocketAddress(1987)); //绑定端口为1987       ssc.configureBlocking(false); //设置为非阻塞模式      ssc.register(selector, SelectionKey.OP_ACCEPT); //注册关心的事件,对于Server来说主要是accpet了     while (true) {   […]

Android开发Java图书推荐 Android开发技术

   很多网友表示看Android时,很多概念不是很清楚,可能是因为Java基础不是很了解,很多开发者可能推荐Java编程思想,不过短期内这种类型的图书更像是语法糖这类的玩具,这里Android123推荐三本图书,可以免去大家找来找去,Android开发网的宗旨就是简单高效,经济,毕竟市面上的图书鱼龙混杂,其实买两本厚书,从浅入深学习Java这种语言还是很快的。    1. 疯狂Java讲义 原价 ¥99.00 元    2. Java高手真经. 编程基础卷:Java核心编程技术 定价 :¥96.00    3. 分布式Java应用:基础与实践  原价¥49.80 元     这三本书看起来可能前两本比较厚,但是内容难易中等,入门和提高很轻松,如果你继续提高,再看Java编程思想可能发现,开发Android应用基本上这4本书来学习Java基础足够了。投入不超过300元,比起各种Java培训等等更有效经济。

Android开发之Eclipse调试技巧 Android开发技术

  使用Google提供的ADT插件可以在Eclipse上很轻松的调试Android程序,我们切换到DDMS标签,选择“Devices”标签,我们可以看到会出现类似下面的Debug Process(调试进程)、Update Threads(更新线程)、Update Heap(更新堆)、Cause GC(引起垃圾回收)、Stop Process(停止进程)、Screen Capture(屏幕截图)、Reset adb(重启Android Debug Bridge)   这里我们就可以很好的观察Android程序运行时的各种状态,比如进程信息、线程分析、堆内存的占用,结束一个进程,当然这些操作都是在DDMS框架下进行的,日程开发的程序是无法执行调用的。如果遇到adb调试桥运行不稳定时可以选择reset adb来重新启动adb.exe进程,整个界面如图:

Android开发过程中很多特性受权限影响 Android开发技术

  如果在开发你的Android软件时莫名奇妙的无法通话,首先使用Logcat查看调试信息,一般出错的问题都是Loe.w的橙色权限提醒问题,当然还有很多高级的系统操作都需要Root权限,Android平台在设计时仍然存在很多的问题,比如Activity的生命周期,如果有部分软件设计缺陷会导致系统运行缓慢而无法关闭,解决的方法在没有Kill Process的情况下只有重启的你的G1,还有部分使用ADP1开发机的用户软件在release时一定不要忘记在g1上测试,否则很多问题都是因为权限而放弃。   相关的常规权限可以查android123的 Android权限列表permission说明

Android开发趋势,QVGA和WVGA的支持 Android开发技术

  近期出现在Google Android开发路线图的动作来看,对于QVGA和WVGA的表现的比较重要,最终随着Android手机不同品牌的推出,使用的屏幕大小和分辨率可能将会出现一些分歧。比如目前使用的是480×320的HVGA,而很多市面上常规的机型使用了320×240的QVGA屏,不过趋势逐渐向宽屏和高分辨率发展。800×480的WVGA已经出现了很多样板机型了。   下面是roadmap原文 Beyond Q1 2009  Support for WVGA and QVGA, in addition to the currently supported HVGA display.   在多国语言以及资源文件分配上,android平台可以很好的通过layout的布局文件来实现本地化问题,这里可以参考本站以前的文章。 Support for additional types of displays:

提高Android开发效率-Eclipse快捷键大全 Android开发技术

  很多过去使用Visual Studio开发软件的网友可能不熟悉Java开发环境,今天Android开发网告诉大家一些提高Android开发效率的Eclipse快捷键,可以有效率的帮助我们管理代码和减少键盘输入。Eclipse相对于Visual Studio而言使用Java开发,响应速度和稳定性上有很大的欠缺,这些我们目前只能容忍下。   比较常用的Android123整理如下:   自动补充import Package Ctrl+Shift+O,这里O代表Organize Import的意思。   格式化代码缩进 Ctrl+Shift+F,这里面我们可以记忆F为Format格式化的意思。   快速查找代码 Ctrl+F,撤消到上一次Ctrl+Z   智能内容感知 Alt+/  ,该快捷键可以方便的匹配我们使用的类信息,/ 在键盘上和?是同一个按键,效果如图所示:     调用运行Run As对话框可以使用Ctrl+F11,如果为Debug调试方式可以直接使用F11。   生成一个板块注释Alt+Shift+J ,单行注释为Ctrl+/键

Android开发网将推出每天一类专题 Android开发技术

  Android开发网将推出每天一类专题,我们将详细讲解并包含测试工程文件,讲解Android SDK以及NDK能带给我们什么样的产品,Android123作为国内外领先的手机软件开发商,致力于Symbian 、Windows Mobile、Android、OMS、Bada、Meego、PC以及iPhone等平台的产品研发。将给国内厂商和个人最好的开发体验辅导,我们承诺版权由CWJ独有,请各出版社不要询问各种出版问题,我们提供完全免费的技术资料,相关建议可以来函至allinsmart@163.com 会一一作答。

layout资源包含,android开发必读 Android开发技术

  有时候我们在一个Android程序中可能会复用布局文件,这时可以在一个xml文件中复用过去的布局文件,但是和常规的使用不同的是,需要加上类似包含头文件一样的include关键字,比如下面我们需要包含layout文件夹下的view.xml布局文件,需要<include layout="@layout/view" />  这样下,完整的如下,大家可以试一试。 <?xml version="1.0" encoding="utf-8"?>   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"      android:orientation="vertical"      android:layout_width="fill_parent"      android:layout_height="fill_parent"      >   <TextView         android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/cwj"      />   <include layout="@layout/view" />  <include android:id="@+id/block" layout="@layout/item" />   <TextView         android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/android123"      />   </LinearLayout> 

新版ADT插件让Android开发更人性化 Android开发技术

就在最新的公开版SDK 0.9r1公开时,使用Eclipse环境开发的网友需要升级下ADT插件,方法参考 Android SDK 0.9版升级注意点 一文,可以看到全新ADT 0.7.1比上一版本0.4增加了不少功能,比如说在Emulator Control中加入了Location Controls,为了让Android模拟器支持GPS调试,我们可以看到三个标签,第一个为Manual手动设置,里面有经度Longitude和维度Latitude,第二个是GPX文件,通过加载GPX文件,Android的DDMS可以自动读取GPX预先的坐标,而最后一个KML和GPX差不多,仅仅是协议不同,后面两种方法为变动数据GPS数据模拟提供了支持,要知道目前都是NMEA-0183,我们直接解析就可以了。

Android开发工具Dev Tools介绍 Android开发技术

Android提供了很多开发调试工具除了ADB、TraceView、Logcat外,今天这个名为Dev Tools的Android开发调试工具隐藏在Android模拟器中,为我们提供了强大的调试支持。我们在功能表中找到Dev Tools,运行后可以看到有很多条目,比如Development Settings,用来开发设置,进入后我们看到了比如Show CPU Usage这样的实用功能显示CPU占用率,帮助Android开发人员分析当前软件性能情况,今天就分析下Development Settings中的选项: Wait for debugger 等待调试器Enable ADB 启用ADB(android调试桥)Show running processs (显示运行中的进程)Show screen updates (显示屏幕更新)   下面是一些常规的调试选项,Android开发网友情提示开启这些选项后可能会影响运行效率,这些探测选项也是CPU敏感的。 Immediately destroy activites (立即销毁activities)Show CPU usage (显示CPU占用率)Show background (显示北京)Show Sleep state on LED (在休眠状态下LED开启)Keep screen on while plugged in (保持屏幕开启当插入后)Show GTalk service connection status (显示GTalk服务连接状态)

Android开发路线图 Android开发技术

 目前Android开发路线图是什么呢?下一步Google会有什么动作,一起来看下吧:    实现本地化   目前所有的用户界面程序框架Android 1.0平台都在英语地区覆盖,目前有美国和英国是发售计划中在本月,同时2008年第四季度将会有德语版本上市,2009年第一季度会包含法语、意大利语、西班牙语、中国台湾繁体中文、荷兰、捷克。这些包含字符串、菜单以及新的日期和数字格式。   支持多个APN接入点   目前特性在访问网络时接入点APN(Access Point Nodes )比较单一,Android开发网感觉可能最终会自动判断,比如浏览器使用Internet APN,而发送彩信使用MMS APN。  SIM卡程序工具包 STK  新的功能将允许SIM卡初始动作的各种操作和增值服务。  以上均为2008Q4的计划,下面是2009年Q1的计划表:   IMF输入法框架 Input method framework   这个特性将会提供对文本输入加入虚拟键盘,用户无需物理QWERTY键盘通过屏幕也可以输入,IMF将允许开发人员设计IME输入法程序基于IMF框架。相关特性我们在Android虚拟键盘功能2009年出现也看见过。  IME输入法引擎 Input method engines 这将会允许软键盘、字典、一些感知算法。Android平台可能会包含一些参考IME开发者可以提供IME输入法程序通过Android Market。

Android开发中硬编码的好处和坏处 Android开发技术

  在Android开发中有时后代码为了方便直接硬编码,其实这是一种不好的习惯,在PC平台写代码可能直接使用的比较多。在移动平台上有时要考虑多国语言问题,Android设计了getString()方法从资源Res文件夹中读取String字符串,这些字符串以xml形式保存在Values.xml文件中。   Android平台在一定程度上更面向对象,除了Java本身,在构架上仍然使用MVC这样的UI和代码逻辑分离,UI可以专心的设计用户界面,代码可以通过类似Jar或MIDL文件来再发行应用,大大提高了代码复用和维护性。   上面都是硬编码的坏处,其实好处也是有的,从单独语言和简单程序来说具有运行效率高和设计简单等方法,但是对于复杂的工程还是建议MVC方式设计比较合理。Android对于资源文件进行了缓存机制,在R类中进行全局注册,也就是说findViewById之后会对这个xml文件做缓存,比如Layout或String。

100% Secure Checkout

PayPal / MasterCard / Visa