任何问题请联系WX:uu16853

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

购买更多有优惠!

Android Zip文件解压缩代码 Android开发技术

   在Android平台中如何实现Zip文件的解压缩功能呢? 因为Android内部已经集成了zlib库,对于英文和非密码的Zip文件解压缩还是比较简单的,下面Android123给大家一个解压缩zip的java代码,可以在Android上任何版本中使用,Unzip这个静态方法比较简单,参数一为源zip文件的完整路径,参数二为解压缩后存放的文件夹。 private static void Unzip(String zipFile, String targetDir) {   int BUFFER = 4096; //这里缓冲区我们使用4KB,   String strEntry; //保存每个zip的条目名称    try {    BufferedOutputStream dest = null; //缓冲输出流    FileInputStream fis = new FileInputStream(zipFile);    ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));    ZipEntry entry; //每个zip条目的实例     while ((entry = zis.getNextEntry()) != null) {      try {       Log.i("Unzip: ","="+ entry);      […]

Android线程优先级设置方法 Android开发技术

  对于Android平台上的线程优先级设置来说可以处理很多并发线程的阻塞问题,比如很多无关紧要的线程会占用大量的CPU时间,虽然通过了MultiThread来解决慢速I/O但是合理分配优先级对于并发编程来说十分重要。Android在线程方面主要使用的是Java本身的Thread类,我们可以在Thread或Runnable接口中的run方法首句加入    Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); //设置线程优先级为后台,这样当多个线程并发后很多无关紧要的线程分配的CPU时间将会减少,有利于主线程的处理,相关的Thread优先级Android123就Android平台专有的定义罗列有以下几种: int THREAD_PRIORITY_AUDIO //标准音乐播放使用的线程优先级 int THREAD_PRIORITY_BACKGROUND //标准后台程序 int THREAD_PRIORITY_DEFAULT // 默认应用的优先级 int THREAD_PRIORITY_DISPLAY //标准显示系统优先级,主要是改善UI的刷新 int THREAD_PRIORITY_FOREGROUND //标准前台线程优先级 int THREAD_PRIORITY_LESS_FAVORABLE //低于favorable int THREAD_PRIORITY_LOWEST //有效的线程最低的优先级 int THREAD_PRIORITY_MORE_FAVORABLE //高于favorable int THREAD_PRIORITY_URGENT_AUDIO //标准较重要音频播放优先级 int THREAD_PRIORITY_URGENT_DISPLAY //标准较重要显示优先级,对于输入事件同样适用。

ADT插件的10.0.1必须要Eclipse 3.5才能升级 Android开发技术

   目前Android开发工具ADT插件最新版本已经升到了10.0.1,但是如果你使用的Eclipse版本过低,可能无法升级,比如说使用的Eclipse版本过低无法运行在Windows Vista/7操作系统上,同时升级插件会提示 Android Development Tools (10.0.1.v201103111512-110841) requires plug-in "org.eclipse.core.runtime (3.5.0)", or later version.这样的错误。

android.resource://这个Uri你知道吗 Android开发技术

   如何访问平时APK文件Res目录下的内容呢? 如果直接访问Apk下的assets目录可以使用AssetManager类处理,而需要访问res/raw这样的文件夹怎么办呢? 这里Android123可以告诉大家APK在安装时已经解压缩,部分资源存放在/data/data/package_name/这里, 比如我们想访问res/raw/android123.cwj文件,可以使用android.resource://package_name/" + R.raw.android123 这个Uri,其中package_name是你工程的包名。   完整的处理代码为 Uri uri = Uri.parse("android.resource://com.android123.Sample/raw/android123.cwj"); 即可使用工程res/raw目录下的文件了。   

WordPress 角色和权限终极指南

WordPress 在 2.0 版本中引入了角色和权限(Roles and Capabilities)系统,以前的用户等级的方法(User Levels)已经被弃用。但是还是有很多插件和主题仍然使用用户级别的方法来控制用户查看设置页面和其他功能。所以这篇指南将详细介绍 WordPress 的角色和权限系统,最终将让你在你的插件和主题中能够正确使用。 什么是角色和权限? 和其他 CMS 或者 Web 程序一样,WordPress 也有一个内置的系统来验证一个特定的用户是否有足够的权限来进行某种动作。WordPress 这个内置的系统就是角色和权限系统,它首先将用户分为角色(Role),然后给每个角色都分配一定的权限。 下面是 WordPress 默认的用户角色: 管理员 -拥有所有的管理权限 编辑 -发表文章,编辑文章,以及编辑其他人的文章,等等。 作者-发布和编辑自己的文章 投稿者 -撰写和编辑自己的文章,但不能发布 订阅者 -查看评论/添加评论/查看文章,等等。 WordPress 的角色和权限系统比用户等级的方法灵活得多,它支持对现有用户角色添加,删除和重新分配权限,甚至还可以添加更多的用户角色,并且不破坏系统原有内置的用户角色。 用户权限和后台菜单 很多插件都都会在 WordPress 后台添加一个管理页面,让用户自定义插件选项,一般我们可以通过下面的函数实现: // 添加主菜单 add_menu_page(page_title, menu_title, capability, handle, [function], [icon_url]); // 添加子菜单 add_submenu_page(parent, page_title, menu_title, capability, file/handle, [function]); //添加选项菜单子菜单 add_options_page(page_title, menu_title, capability, handle, [function]); //添加工具菜单子菜单 add_management_page(page_title, […]

WordPress 技巧:禁用 WP Cron

我们知道 WordPress 有个进程专门用来在指定的时间周期或者将来的某个时间点运行特定的任务,比如定时发布某篇日志。这个功能 WordPress 是通过 WP-Cron 实现的,它会在每次你的博客有人访问或者在后台工作的时候,都会去检查当前是否有任务要执行。这样可能会引起一些问题: 增加服务器加载时间,特别是网站访问用户特别多的时候。 而网站的访问用户很少或者加载了静态缓存插件,指定的任务可能又不运行。 所以最好不要让 WordPress 在后台执行 WP-Cron,而是使用服务器的真正的定时 Cron 功能来执行。 可以通过在 wp-config.php 添加下面的代码禁用 WP-Cron: /* Disable background wp-cron */ define('DISABLE_WP_CRON', true); 然后在服务器上创建真正 Cron 作业,如果你使用 Bluehost 这类使用 Cpanel 管理的主机,可以直接在 Cpanel 面板 > 高级选项 > Cron Jobs 中添加: 根据你自己博客定义作业的情况,定义执行的时间周期,比如一天2次等。然后输入下面的命令: /usr/bin/php -f /home/username/public_html/wp-cron.php >/dev/null 你需要根据自己主机的实际情况更改下上面的命令中 wp-cron.php 文件的路径。 或者直接使用服务器访问 wp-cron.php: wget http://YourDomain.com/wp-cron.php 标签:WordPress 技巧 […]

简洁蓝色 Metro 风格的 WordPress 主题:Qetro

如果你喜欢简洁,喜欢蓝色,喜欢文字居多的博客风格。那么,你可以看一下这个 Qetro 这个主题。Qetro 是潜行者M的一个原创作品,以简洁为主线,搭配一些简单的色彩,主要用来展示文字。支持自定义顶部导航菜单、以及三个小工具(边栏、底部一区、底部二区),可以实现大部分用户的普通需求,直接在后台操作即可,无需复杂的科学知识。 当然,如果你是一个 WordPress 主题折腾爱好者,Qetro 的结构和代码也比较简洁简单,可以方便的进行修改,也可以让非常菜的新手朋友研究学习制作主题。 Qetro 结构较为合理,对页面进行了轻微的优化,打开速度尚可。对浏览器的兼容性较好,兼容主流现代浏览器,对于IE来说,除了 IE6 没有实际测试之外,在 IE7、8 中的测试均达到预期效果。在 W3C html校验 中,仅有一处百度分享代码不规范。在 W3C CSS3 校验 中,仅有4处 CSS hack 没有通过。 因为 多说 这样的社会化评论插件功能过于强大,再加上编写评论模块比较复杂,所以现在的1.4版只带有比较简单的原生评论模块,推荐安装多说插件。此外一些短代码之类的高级功能暂时还没有。这些将会在后续版本中升级增加。 主题演示 | 主题官方介绍 | 下载主题 标签:WordPress 主题

WordPress 技巧:清理选项设置,加速博客运行效率

当我们开始使用 WordPress,肯定会试着去装一些插件,然后觉得一些插件没用或者不适合自己了,就卸载了。但是由于一些 WordPress 插件写的不规范或者考虑的不全面,会在系统中留下一些使用的痕迹,所以 WordPress 会越用会越慢。 其中相当一部分痕迹是插件将选项写到了 WordPress Options 表中,卸载的时候并没有删除这些选项,而 WordPress 在运行的时候,会把所有的 autoload 为 yes 的选项都导入,所以这样就会造成了 WordPress 效率降低。 查看 WordPress 博客中所有选项设置 在 WordPress 中,我们是可以快速查看到所有博客选项设置,包括已经卸载了的插件留下的。通过这个 url 就可以查看到所有选项设置:http://你博客安装 URL/wp-admin/options.php,并且还能修改设置,不过有些数据是以序列化形式保存的(比如一些复杂的设置以一个数组存到选项中),这些选项就无法修改。但是这个页面并没有提供让我们删除没用的选项的链接,通过这个页面获取无用的选项之后,我们可以直接使用 PHPMyAdmin 到数据库中去删除它们。 使用插件清理 WordPress 中没用的选项设置 如果你觉得手工在 PHPMyAdmin 删除这些选项风险太大,毕竟有很多选项是 WordPress 自带,有时还是比较难以判断的,那么我们可以通过插件来进行清理: Clean Options Clean Options 可以查找 wp_options 表中废弃的选项,它通过 get_option 和 get_settings 这两个函数来检查那些选项是博客中真正用到的,这样保证了我们不会删除那些当前博客运行真正需要的选贤。并且这个插件还提供了链接让你去 Google 上搜索下选项。 WP-Options-Manager WP-Options-Manager 这个插件可以让你浏览,删除和 debug 博客的选项,并且它会自动被隐藏 […]

WordPress 插件:Last Post Redirect(最新日志跳转)

Last Post Redirect 是一个 WordPress 插件,主要功能是在你的博客上快速定位到你博客的第 N 篇文章。比如要定位到第一篇文章,可以在浏览器的地址栏输入这样的的地址: http://yourblog/?lastpost 或者 http://yourblog/?lastpost=1。如果要快速定位到第10篇文章,则输入:http://yourblog/?lastpost=10。 根据上面的描述,所以这个插件最大的用途可能是,可以通过 http://yourblog/?lastpost 这个链接将博客的最新的日志贴到 QQ 的签名档,或者邮件的个人签名中,让你的朋友点击你最新的日志。 这个插件主要代码参考 Matt 的 Random Redirect,整个插件使用非常简单,只需上传激活即可,然后就可以实现跳转。 下载 Last Post Redirect:last-post-redirect.zip 标签:WordPress 插件

Android 3.0开发用的平板推荐 Android开发技术

  随着Android 3.0的平板不断曝光,很多公司开始介入Android平板电脑的开发。这里Android123就市面上主流的平板做一个简单的分析。   一线品牌: 摩托罗拉Xoom、三星Galaxy Tab 8.9和Galaxy Tab 10.1 、LG Optimus Pad(LG G-Slate)、HTC未知型号的产品。   二线品牌: 宏碁Iconia Tab、华硕Eee Pad Transformer等。   由于Motorola Xoom是CDMA EVDO网络的设备,同时有传闻将在6月份推出Xoom第二代产品,如果喜欢Xoom的网友可以考虑购买一个WiFi版本。而三星Galaxy Tab 8.9和10.1这里Android开发网推荐购买。在二线品牌中我们选择了老牌的笔记本和上网本制造商 Acer和Asus可以保证品质,同时华硕的Eee Pad Transformer支持外接笔记本键盘,可以变身一个“笔电”   而对于部分市场上的Android 2.x平板作为开发完全不推荐大家够买   三星Galaxy Tab P1000   同时目前是Android 2.x可能升级3.0的产品有   联想LePad、HTC Flyer。   最终购买的结论是Android平板考虑到固件升级及时,以及质量保证建议购买上述一线品牌产品,同时CPU尽量是NVIDIA Tegra2 A9双核,RAM在1GB,屏幕在1280×800,预装Android 3.0或3.0.1系统的平板设备。

Android Theme主题样式开发注意点 Android开发技术

  Android默认情况下提供了一些实用的主题样式,比如说Theme.Dialog可以让你的Activity变成一个窗口风格,而Theme.Light则让你的整个Activity具有白色的背景,而不是黑色那么沉闷。具体使用方法很简单在Androidmanifest.xml文件中对你的Activity节点上加入些代码,如图所示   部分代码为 android:theme="@android:style/Theme.Dialog"  和  android:theme="@android:style/Theme.Dialog"  ,这里Android123提醒大家,有关@后面是android:的定义均在Android内部的Framework层由系统自带。

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面试基础题做下总结,看看你能做出多少道?   1. Intent的几种有关Activity启动的方式有哪些,你了解每个含义吗?     这里Android123提示大家,Intent的一些标记有FLAG_ACTIVITY_BROUGHT_TO_FRONT 、FLAG_ACTIVITY_CLEAR_TOP、FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET、FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS、FLAG_ACTIVITY_MULTIPLE_TASK和FLAG_ACTIVITY_NEW_TASK 等。每种含义大家看SDK文档和具体跑下这样你的记忆会更深刻些。   2. Activity和Task的启动模式有哪些? 每种含义是什么?    有关在AndroidManifest.xml中的android:launchMode定义,主要有standard、singleTop、singleTask和singleInstance,同时对于android:taskAffinity这些问题大家也要了解,Android开发网在以前的文章中讲过,不过很多开发者仍然不是很清楚,这些基础问题我们以后仍然会再次总结。   3. 通过Intent传递一些二进制数据的方法有哪些?    1). 使用Serializable接口实现序列化,这是Java常用的方法。   2). 实现Parcelable接口,这里Android的部分类比如Bitmap类就已经实现了,同时Parcelable在Android AIDL中交换数据也很常见的。   4. 能说下Android应用的入口点吗?   在Google的虚拟机中Application实例中已经实现了main方法,有关具体的Application介绍可以参考 Android程序的入口点是什么,不是Main()吗   5. Java基础问题,说说HashSet和HashTable的区别?   这个相信Java程序员都知道HashSet相对于HashMap就是不能存放重复的数据,对于HashTable来说,存放的数据不能出现key或value为null这样的情况。   6. Java基础问题,用Java的集合类写下广度优先搜索.   这个属于基础数据结构问题,通过队列处理一层一层,相对于深度优先的栈处理方式来说更实用一些。   7. Android都有哪些XML解析器,都熟练掌握吗?   这里XmlPull、SAX和DOM相信做过Web开发的都已经滚瓜烂熟了。   8. SQLite支持事务吗? 添加删除如何提高性能?   SQLite作为轻量级的数据库,比MySQL还小,但支持SQL语句查询,提高性能可以考虑通过原始经过优化的SQL查询语句方式处理。   9. Android Service和Binder、AIDL你都熟练吗?   作为Android重要的后台服务,这些每个Android开发者都应该掌握,这也算是和Java […]

设置Activity大小不再全屏原理 Android开发技术

  如何设置Activity的大小,让你的窗口看起来不再是全屏的。有些网友可能知道通过主题比如Theme.Dialog来实现,不过今天Android123告诉大家设置Activity不再全屏显示的原理。Android Theme也主要是通过定义Style来实现的,实现的原理大家可以直接看Android Framework中的定义,今天给一种更简单,但相对灵活的方法,比如不要Theme.Dialog中的边框,下面就一起来看下自定义Activity大小的实现方法。   1. 创建一个样式文件到你的工程,保存在在res/values/styles.xml,这里文件名不能随便修改,内容为,注意保存时使用UTF-8编码。 <?xml version="1.0" encoding="utf-8"?> <resources>         <style name="Theme.Android123" parent="android:style/Theme.Dialog">         <item name="android:windowBackground">@drawable/bg</item>  </style> </resources>  2. 上面我们定义的主题风格为Theme.Android123,父风格仍然从Theme.Dialog实现,但我们自定义了背景,位置在drawable/bg中,这里我们创建一个bg.xml文件放到res/drawable文件夹中,bg.xml的内容为 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:Android="http://schemas.android.com/apk/res/android">         <padding android:left="15dp" android:top="15dp" android:right="15dp" android:bottom="15dp" />         <stroke android:width="3dip" color="#000000" />         <corners android:radius="5dp" />  <solid android:color="#ffffff" />       </shape>  里面我们定义了一个shape对象,实现背景drawable形状,其中padding代表距离边框,这里我们设置了左、上、右、下四个位置的间距。stroke可以制造出一些3D立体效果,corners是四个角,radisu属性可以设置半径,值越大越圆滑,根据运行效果你可以微调,最后soild是填充颜色,这里我们用了ffffff表示纯白。   3. 最后在androidmanifest.xml中,在你的activity节点加一个 android:theme属性,值为@style/Theme.Android123 即可。

控制软键盘显示和隐藏 Android开发技术

  如何用Java代码控制Android软键盘的显示和隐藏呢? 过去我们在 EditText中显示隐藏Android输入法窗口 提到过,部分网友可能没有太注意。 InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);imm.hideSoftInputFromWindow(myEdit.getWindowToken(), 0); //myEdit是你的EditText对象  下面就可以通过下面方法可以恢复显示  boolean  showSoftInput(View view, int flags, ResultReceiver resultReceiver) boolean  showSoftInput(View view, int flags) void  showSoftInputFromInputMethod(IBinder token, int flags)

Live Wallpaper动态壁纸开发 Android开发技术

  对于Android 2.1来说Live Wallpapers动态壁纸的加入为Android桌面加入了更好的动态效果。如何开发一个Android动态桌面呢? 下面Android123给大家一个详细的步骤创建属于你自己的Live Wallpaper吧。   1. 首先我使用Eclipse创建一个标准的Android工程这里package name我们使用cn.com.android123.cwj,然后进入工程的/res/文件夹,删除layout这个文件夹,当然里面的main.xml也会被删除的,对于Live Wallpaper来说传统的布局文件是不需要的。   2. 类似AppWidget一样,我们可以加入动态壁纸的设置界面,我们在/res/文件夹中新建一个名为xml的文件夹,新建一个utf8编码的xml文件,名为livewallpaper.xml,内容为    <?xml version="1.0" encoding="utf-8"?>  <wallpaper xmlns:android="http://schemas.android.com/apk/res/android" android:settingsActivity="cn.com.android123.cwj.LiveWallpaperSettings" android:thumbnail="@drawable/icon"/>    这里我们可以看到上面的节点名为wallpaper,而设置的界面为 cn.com.android123.cwj.LiveWallpaperSettings  这个Activity,而在添加动态壁纸时显示图标为/res/drawable/icon 这个文件,同时我们再创建一个xml文件用于LiveWallpaperSettings这个Activity的布局,我们起名为livewallpaper_settings.xml内容为   <?xml version="1.0" encoding="utf-8"?><PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:title="@string/livewallpaper_settings" android:key="livewallpaper_settings">  <ListPreference  android:key="livewallpaper_testpattern"  android:title="标题"  android:summary="简单描述"  android:entries="@array/livewallpaper_testpattern_names"  android:entryValues="@array/livewallpaper_testpattern_prefix"/>  <CheckBoxPreference android:key="livewallpaper_movement"  android:summary="动态描述"  android:title="动态标题"  android:summaryOn="动态测试"  android:summaryOff="静止测试"/></PreferenceScreen>   3. 创建一个名为LiveWallpaper的类作为动态壁纸的主类,从WallpaperService父类继承,这里我们可以像写标准Android服务那样开发,代码为   public class LiveWallpaper extends WallpaperService{  public static final String SHARED_PREFS_NAME = "livewallpapersettings";  @Override public void onCreate() {  super.onCreate(); }  @Override public void onDestroy() {  super.onDestroy(); }  @Override public Engine onCreateEngine() {  return new TestPatternEngine(); } […]

ListView的右边滚动滑块启用方法 Android开发技术

  很多开发者不知道ListView列表控件的快速滚动滑块是如何启用的,这里Android开发网告诉大家,辅助滚动滑块只需要一行代码就可以搞定,如果你使用XML布局只需要在ListView节点中加入  android:fastScrollEnabled="true" 这个属性即可,而对于Java代码可以通过myListView.setFastScrollEnabled(true); 来控制启用,参数false为隐藏。   还有一点就是当你的滚动内容较小,不到当前ListView的3个屏幕高度时则不会出现这个快速滚动滑块,同时Android123大家该方法仍然是AbsListView的基础方法,可以在ListView或GridView等子类中使用快速滚动辅助。

Neither user nor current process错误 Android开发技术

  有时候我们可能在Androidmanifest.xml中声明了某些权限,比如说 android.permission.SET_TIME 可能出现ERROR/AndroidRuntime(3759): java.lang.SecurityException: Neither user 10024 nor current process has android.permission.SET_TIME  这样的错误,10024是系统的UID,所以如果你没有系统的UID使用Platform的APK签名是没有权限使用相关方法的。   对于这种情况考虑   1.拥有Root权限,这里Android123推荐大家发掘自己的潜能,寻找0day漏洞。   2.设置你APK为UID和system的一样,但必须找到你当前固件平台的签名,参考 platform.x509.pem和platform.pk8的用处

AsyncTask实现原理和内部代码 Android开发技术

  Android从1.5开始引入了AsyncTask这个类,可以帮助我们解决线程和界面刷新问题,主要是对Thread+Handler这样的封装,但在设计模式和代码维护方面都有不错的表现。对于AsyncTask的实现原理和内部的代码如何实现Android123一起和大家分享,早在2008年时Google推出了一个示例应用叫PhotoStream来演示UI在多线程网络慢速I/O下的刷新问题,里面的线程构造使用的正是AsyncTask的雏形,由于内部使用Java 1.5的并发库比普通初级Android开发者编写的Thread+Handler稳定很多,下面我们就android.os.AsyncTask的实现   public abstract class AsyncTask<Params, Progress, Result> {    private static final String LOG_TAG = "AsyncTask";     private static final int CORE_POOL_SIZE = 5; //线程池数量    private static final int MAXIMUM_POOL_SIZE = 128; //线程池中最大线程数    private static final int KEEP_ALIVE = 1;     private static final BlockingQueue<Runnable> sWorkQueue =            new LinkedBlockingQueue<Runnable>(10); //使用并发库的阻塞队列初始时保存10个Runnable对象     private static […]

IntentService实现原理及内部代码 Android开发技术

    很多网友可能发现Android中除了Service还有一个IntentService,他们之间到底有哪些区别呢? 在继承关系上而言IntentService是Service的子类,内部实现的代码中涉及到一些Android入门开发者不了解的Looper,Android123在早期的文章中已经说明他们的用法,这里不再赘述,有关原理大家可以看源码实现如下: public abstract class IntentService extends Service {    private volatile Looper mServiceLooper;     private volatile ServiceHandler mServiceHandler; //一个Handler封装了Looper对象    private String mName;    private boolean mRedelivery;     private final class ServiceHandler extends Handler {        public ServiceHandler(Looper looper) {            super(looper);        }         @Override        public void handleMessage(Message msg) {            onHandleIntent((Intent)msg.obj);            stopSelf(msg.arg1);        }    }     public IntentService(String name) […]

PendingIntent实现原理和代码 Android开发技术

  对于Android的Intent相关内容,可能部分初级Android开发者不知道PendingIntent是干什么的? 对于Notification和SmsManager中的sendMessage以及AlarmManager中的set这些方法中均有PendingIntent,到底PendingIntent和Intent有哪些不同呢?   一、Intent  通常Android中的Intent位于     android.content.Intent的实现比较简单,直接从Object类实现,内部主要是保存了一些String或Int、轻量级的数组,提供了一些方法主要是赋值或取值。   二、PendingIntent   这里和Intent的不同分在了android.app.PendingIntent这个包中,属于app层而不是数据存储封装的content层,从首段我们看到了PendingIntent是针对将要发生的事情,比如短信发送时,本对象用于跟踪未来短信的接收情况,主要是短信回执报告和发送成功或失败,因为GSM通讯到RIL再到移动基站的过程很漫长,通过开一个Thread等待对于我们的应用是比较麻烦和耗资源,而Android的框架层的TelephonyManager底层远程服务会跟踪,最终通过PendingIntent来跟踪,有关具体实现原理和代码如下:   public final class PendingIntent implements Parcelable { //实现了Parcelable接口,可以方便的处理二进制数据和用于远程服务的数据交换  private final IIntentSender mTarget;     public static final int FLAG_ONE_SHOT = 1<<30;    public static final int FLAG_NO_CREATE = 1<<29;    public static final int FLAG_CANCEL_CURRENT = 1<<28;    public static final int FLAG_UPDATE_CURRENT = 1<<27;     […]

HashSet的equals和hashCode重写问题 Android开发技术

  通常在Android开发中可以方便的使用Java的集合类,对于HashSet可能部分网友比较陌生,相对于HashMap他们有哪些不同呢? HashSet从名称上看可以理解为Hash+Set,Set集合是不允许元素重复的,所以使用时必须考虑元素的重复问题,一般我们需要重写equals和hashCode来实现内部元素的比较排序等。重写方法比较简单    @Override    public boolean equals(Object obj) {        if (obj instanceof T) {            return obj.equals(T.obj);        }        return false;    }     @Override    public int hashCode() {        return T.hashCode();    }

Android数据库SQLite性能优化技巧 Android开发技术

  对于Android使用的数据库而言,官方提供了开源的SQLite,由于支持SQL语言查询底层开源整体性能表现的比较稳定,如果提高你的Android数据库性能? 下面Android开发网就平时用到的技巧和大家分享:   1. 相对于封装过的ContentProvider而言,使用原始SQL语句执行效率高,比如使用方法rawQuery、execSQL的执行效率比较高。   2. 对于需要一次性修改多个数据时,可以考虑使用SQLite的事务方式批量处理,我们定义SQLiteDatabase db对象,执行的顺序为   db.beginTransaction();  //这里处理数据添加,删除或修改的SQL语句  db.setTransactionSuccessful(); //这里设置处理成功  db.endTransaction(); //这句很重要,告诉数据库处理完成了,这时SQLite的底层会执行具体的数据操作。   3. 打好SQL语句的基础,对于查询,以及分配表的结构都十分重要,Android123建议有时间的网友可以查看下SQLite的源码对底层实现加深了解后可以很好的做性能调优。

Concurrent并发库常见问题总结 Android开发技术

  对于Android开发者来说掌握Java的concurrent并发库十分重要,本次Android123就并发库的一些常见问题做总结:   1. 原子操作   如果你过去开发过Win32驱动可能发现很多Native API都是有关原子操作的(atomic operation),对于Java来说int、boolean这样的类型是原子的,而long和double就没有那么幸运了。原子操作是什么呢? 比如说Java线程的停止,在早期的JDK中提供了Thread.stop方法,但这个并不是线程安全的,而目前我们停掉一个Java线程都是用一个boolean变量来设置一个标记,你考虑这个boolean标记的改变是通过外部的其他线程,这样产生的同步问题如何解释呢? 这就是原子操作带来的好处,对于Long型我们可以使用java 1.5以后加入的concurrent.atomic的AtomicLong,对于Android来说支持以下原子类型: AtomicBoolean、AtomicInteger、AtomicIntegerArray、AtomicIntegerFieldUpdater<T>、AtomicLong、AtomicLongArray、AtomicLongFieldUpdater<T> 、AtomicMarkableReference<V> 、AtomicReference<V> 、AtomicReferenceArray<E>、AtomicReferenceFieldUpdater<T, V> 和AtomicStampedReference<V>  。  2. 并发库的CopyOnWriteArrayList   对于CopyOnWrite机制可以解决读取频繁,写入较少时的并发效果,有关这方面内容我们在 Android开发之Java并发包集合类性能分析 有过讲解。  3.

WakeLock使用方法示例代码 Android开发技术

  Android中提供了一个名为WakeLock的类在android.os.PowerManager.WakeLock中,从名字来看WakeLock是唤醒锁的意思,它可以控制屏幕的背光开关,所以在电源管理类。   WakeLock实例化方法比较简单,因为是系统的远程服务,通过下面的代码来构造 PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);  PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "Android123"); //最后一个参数为实例名,可以换成其他的。  wl.acquire();  //唤醒点亮屏幕 //这个期间屏幕将点亮 wl.release(); //恢复屏幕到黑暗  当然Android考虑到安全并不是说开发者有了权限,就可以随意的控制屏幕的背光显示或无,只有通过acquire点亮的背光才能使用release让其关闭背光,如果直接调用release方法关闭屏幕将会产生一个异常。  从Android 2.1 API Level7开始增加了一个判断屏幕是否处于点亮状态可以使用public boolean isScreenOn ()这个方法,代码为 PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);boolean isScreenOn = pm.isScreenOn();  而对于Android 2.2 API Level为8时增加了一个reboot(),可以重启手机进入恢复模式,同时你需要申请权限 <uses-permission android:name="android.permission.REBOOT"></uses-permission> 来实现,不过Android开发网不保证该方法在所有固件上有效,部分厂商考虑到安全并没有开发这个重启方法。

设置ScrollView滚动条的颜色 Android开发技术

  很多开发者在做Android UI时不知道如何设置ScrollView滚动条控件的滑块颜色,其实通过ScrollView的xml布局属性android:scrollbarThumbVertical可以关联一个drawable对象,比如说在ScrollView中我们有   android:scrollbars="vertical"   //滚动条是垂直的  android:scrollbarThumbVertical="@drawable/red"  //垂直滚动条颜色为red,red可以是一个png的图片或用shape组成的xml图形文件组成的drawable对象。

Android 2.3系统自带高清UI图标下载 Android开发技术

  有关Android 2.3系统自带图标素材,原始高清晰PNG透明格式图标这里Android开发网整理如下,     原始PNG格式图标,Android123本地下载 http://down.android123.com/android-icon.rar (1.59MB)  

100% Secure Checkout

PayPal / MasterCard / Visa