﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Jiangshachina-随笔分类-Android</title><link>http://www.blogjava.net/jiangshachina/category/46245.html</link><description>同是Java爱好者，相逢何必曾相识！&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;a cup of Java, cheers!</description><language>zh-cn</language><lastBuildDate>Wed, 14 Dec 2011 21:03:16 GMT</lastBuildDate><pubDate>Wed, 14 Dec 2011 21:03:16 GMT</pubDate><ttl>60</ttl><item><title>JavaOne and Oracle Develop 2010 (Beijing)--Preview(原)</title><link>http://www.blogjava.net/jiangshachina/archive/2010/12/12/340183.html</link><dc:creator>Sha Jiang</dc:creator><author>Sha Jiang</author><pubDate>Sun, 12 Dec 2010 12:55:00 GMT</pubDate><guid>http://www.blogjava.net/jiangshachina/archive/2010/12/12/340183.html</guid><wfw:comment>http://www.blogjava.net/jiangshachina/comments/340183.html</wfw:comment><comments>http://www.blogjava.net/jiangshachina/archive/2010/12/12/340183.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/jiangshachina/comments/commentRss/340183.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jiangshachina/services/trackbacks/340183.html</trackback:ping><description><![CDATA[<div align="center"><strong><span style="font-size: 10pt;">
<span style="font-size: 14pt;">JavaOne and Oracle Develop 2010 (Beijing)--Preview</span></span></strong><br />
</div>
<span style="font-size: 10pt;">
自从<a href="http://www.oracle.com/us/corporate/press/018363">Sun被Oracle收购</a>之后，往常一年一度的SunTechDays就离我们而去了，但它以另一种形式--<a href="http://www.oracle.com/cn/javaonedevelop/index.html">JavaOne与Oracle开发者大会(北京)</a>--回到了我们的身边。本次大会即将在下周开幕，在此之前请允许我先列举一下我个人感兴趣的若干主题。(2010.12.12最后更新)<br />
<br />
<a href="http://www.oracle.com/cn/javaonedevelop/index.html">JavaOne与Oracle开发者大会2010(北京)</a>下周就要与大家见面了，其实与本次会议同时进行的还有Oracle全球大会2010(北京)(大家肯定知道Oracle的<a href="http://www.oracle.com/us/openworld/splash/index.html">Openworld</a>吧)。这两个会议相对独立，可以同时注册，也可以只参加其中任何一个，当然，参会费将有所不同。由于我只参加JavaOne与Oracle开发者大会2010(北京)，故本文中的内容将只涉及这一会议中的相关主题。各个主题的的<a href="https://oraclecn.wingateweb.com/scheduler/eventcatalog/eventCatalog.do">简介</a>我均摘抄自本次会议的官方网站，最后我还会混说几句^_^<br />
<br />
<strong><span style="font-size: 12pt;">1. Java程序设计语言</span></strong><br />
<strong>Coin项目：针对JDK的微小语言变化</strong><br />
&nbsp;&nbsp;&nbsp; <a href="http://openjdk.java.net/projects/coin/">Coin项目</a>旨在通过选择和实施一组微小的语言变化来提高程序员的JDK生产力。Coin项目语言变化包括改进的整数值、字符串转换和尖括号输入。本专题讲座将介绍这些语言变化并演示IDE支持。此外还将讨论通用语言演变的选择过程和标准。<br />
<br />
<strong>JDK 7和Java SE 7</strong><br />
&nbsp;&nbsp;&nbsp; 本专题讲座将展示Oracle工程师和外部人员为JDK 7和Java SE 7开发的一些主要特性。然后将展望一下未来版本的可能特性。<br />
<br />
<strong>在JDK中使用文件系统API</strong><br />
&nbsp;&nbsp;&nbsp; JDK不久将包含一个新的文件系统API，用于解决许多长期存在的问题和java.io.File局限性问题。本专题讲座将介绍该API并说明它可以如何用于：* 访问文件* 控制路径* 复制和移动文件* 处理符号链接* 执行递归操作* 访问文件权限和其他属性* 监控文件系统* 开发自己的定制文件系统* 其他我们将通过实例来说明如何有效使用该API来构建广泛使用文件系统的工具和应用程序。<br />
<br />
<strong>代码签名最佳实践</strong><br />
&nbsp;&nbsp;&nbsp; 代码签名对于开发人员来说极具吸引力，因为它能为Java应用或扩展提供通常没有的更多权限。然而，有时最佳的决策却是不用代码签名，因为这会改善用户体验，并且应用程序可在安全沙盒中自动运行。 本专题讲座将介绍代码签名最佳实践，探讨何时进行代码签名并提供其部署技巧。我们还将介绍使用户能够创建更引人注目的非签名应用程序的新特性以及即将推出的与代码签名相关的JDK特性，例如签名模块。<br />
<br />
<strong><span style="font-size: 12pt;">2. Java虚拟机</span></strong><br />
<strong>Oracle的Java虚拟机战略</strong><br />
&nbsp;&nbsp;&nbsp; 本专题讲座介绍HotSpot和Oracle JRockit这两个通用的Oracle Java虚拟机 (JVM)。讲座将讨论两种实施的优缺点，给出选择建议&#8212;&#8212;特别是采用了Oracle融合中间件产品时，并介绍融合为一个统一JVM的路线图。<br />
<br />
<strong>我的应用程序怎么了：Java虚拟机监控工具</strong><br />
&nbsp;&nbsp;&nbsp; 随着多核系统的广泛使用，开发人员面临着新的问题，如CPU数量增加时性能下降。这些大规模问题往往是由于使用传统调试器和分析器时对局部事件的不可见（缓存丢失、锁定模式等）造成的。本专题讲座将介绍一个新的开发工具，它准确记录并巧妙显示线程、锁、处理器和内存之间的交互。演示将展示如何：* 监控JDK 6、JDK 7和Java实时系统* 使用分布视图来快速识别风险* 在出现特定问题时使用频率视图来探查* 使用调度视图来检查当时究竟发生了什么* 关联这些视图。<br />
<br />
</span><span style="font-size: 10pt;"><strong>垃圾回收流言终结者</strong><br />
&nbsp;&nbsp;&nbsp; 垃圾回收 (GC)
的采用促进了大型企业管理软件可靠性的提高和开发时间的缩短。但GC不是一个魔杖；尽管它可以消除许多种可能的程序员错误，但还有一些其他问题开发人员必
须加以注意在本专题讲座中，我们将对许多GC神话做一个公正的评估：它擅长什么和不擅长什么。尽管本讲座不会直接涉及某一特定产品，但它也值得所有使用
Java及依赖于Java虚拟机的其他语言（如Scala、Jython、Jruby等）编写程序并使用GC的程序员关注。<br />
<strong><br />
如何在Java虚拟机上调优和编写低延迟应用程序</strong><br />
&nbsp;&nbsp;&nbsp; 许多软件应用程序都需要低延迟响应。这些应用程序的许多使用者都希望利用Java SE所提供的开发和部署优势。随着Java虚拟机 (JVM)
的最新发展，许多有低延迟要求的应用程序都可以使用Java
SE来实施。本专题讲座将介绍如何针对这些应用程序和编程结构调优现代JVM，以及可实现低延迟响应的Java SE数据结构最佳实践。</span><br />
<span style="font-size: 10pt;">
<br />
<strong><span style="font-size: 12pt;">3. Oracle</span></strong><br />
<strong>使用Oracle数据库构建高性能应用程序的最佳实践</strong><br />
&nbsp;&nbsp;&nbsp; 本专题讲座将探讨使用Oracle数据库11g构建高性能应用的设计和编码最佳实践，并将涉及数据库访问层。本讲座还将演示Oracle数据库11g工具，如AWR和ADDM，突出它们所提供的卓越的应用程序性能洞察力，并展示这些工具如何在开发周期初期以及应用程序部署阶段帮助识别应用程序的问题。虽然介绍的是Java和C/C++用例，但所述技术还适用于其他语言，如PHP、Ruby、Python和Perl。本专题讲座适合于希望了解如何提升基于数据库的应用程序性能的任何人，无论他们使用何种编程语言。<br />
<br />
<strong>部署一个"隐形"的数据库：Oracle数据库11g第2版</strong><br />
&nbsp;&nbsp;&nbsp; 本专题讲座将详细介绍如何在嵌入式环境中部署具有行业优势的完整数据库。您将了解到如何使用Oracle数据库11g第2版目前提供的可用工具和功能将该数据库嵌入您的应用程序中，使之对最终用户完全透明。本专题讲座还将探讨嵌入式数据库的静默安装、管理和可用性。<br />
<br />
<strong>面向开发人员和DBA的强大Oracle SQL Developer报表</strong><br />
&nbsp;&nbsp;&nbsp; 大多数数据库管理员都有数据库健康检查和查看数据库状态的脚本，而应用开发人员和数据库开发人员则通过运行报表来监控其数据状况和检查其所用的数据库结构。Oracle SQL Developer为检查和查询实例及系统数据提供了一组现成报表。通过应用额外的过滤器，并进行相应的数据排序，可以审查和调整数据展现表格。本专题讲座将向用户展示如何利用这些报表和支持数据表格的特性。您将了解如何自建报表，包括图形化显示、主从报表、传递参数和钻取功能。<br />
<br />
<strong>使用内存数据库技术的高性能SQL应用程序</strong><br />
&nbsp;&nbsp;&nbsp; 本专题讲座将就Oracle TimesTen内存数据库和Oracle内存数据库高速缓存的产品功能进行技术讨论和演示。了解如何使用JDBC、ODBC、.NET、OCI、 Pro*C和PL/SQL等标准SQL和数据库API来显著提高应用程序响应速度和吞吐量。本专题讲座将揭示如何使用内存数据库高速缓存网格有效扩展应用程序，从而扩大事务吞吐量和高速缓存数据的有效尺寸。对于需要利用易于理解和广泛使用的数据库API来最大限度地提高新应用程序和现有应用程序性能的数据库开发人员，本专题讲座是最佳选择。<br />
<br />
<strong>使用内存数据库技术的高性能SQL应用程序</strong><br />
&nbsp;&nbsp;&nbsp; 本专题讲座将就Oracle TimesTen内存数据库和Oracle内存数据库高速缓存的产品功能进行技术讨论和演示。了解如何使用JDBC、ODBC、.NET、OCI、 Pro*C和PL/SQL等标准SQL和数据库API来显著提高应用程序响应速度和吞吐量。本专题讲座将揭示如何使用内存数据库高速缓存网格有效扩展应用程序，从而扩大事务吞吐量和高速缓存数据的有效尺寸。对于需要利用易于理解和广泛使用的数据库API来最大限度地提高新应用程序和现有应用程序性能的数据库开发人员，本专题讲座是最佳选择。<br />
<br />
<strong><span style="font-size: 12pt;">4. MySQL</span></strong><br />
<strong>MySQL 5.5版中性能和可伸缩性的增强 </strong><br />
&nbsp;&nbsp;&nbsp; 本技术专题讲座深入探讨了MySQL服务器和InnoDB 1.1插件中新增的性能特征。其中包括对多核系统获得的可伸缩性的详细介绍。<br />
<br />
<strong>MySQL性能调优最佳实践</strong><br />
&nbsp;&nbsp;&nbsp; 了解如何只利用MySQL附带的工具进行MySQL的基本调优。了解如何对连接进行调优以及选择最佳存储引擎，了解如何分析MySQL服务器的关键统计数据。本专题讲座是一个技术讲座，但无需具备MySQL经验。<br />
<br />
<strong>MySQL的战略：下一步计划是什么？</strong><br />
&nbsp;&nbsp;&nbsp; 本讲座将介绍MYSQL社区、产品和战略的最新信息，探讨MYSQL如何与Oracle全面、开放且集成的战略相一致。结识领先的MySQL开发者，了解MySQL的下一步开发计划。<br />
&nbsp;&nbsp;&nbsp; <em>笔者：由于Sun被Oracle收购后，MySQL就很自然地落入了Oracle的袋中，从那时起，整个社区对MySQL的前景就执悲观态度。MySQL算是我最熟悉的主流数据库了，但也很长时间没太关注了，这次就顺便听听Oracle将如何安排MySQL的命运。</em><br />
<br />
<strong><span style="font-size: 12pt;">5. Embedded/Mobile</span></strong><br />
<strong>我的朋友在哪里：Java ME定位API实践</strong><br />
&nbsp;&nbsp;&nbsp; 在本上机操作中，参会者将创建一个使用Java平台微型版(Java ME)定位API的移动应用程序，以跟踪其朋友的位置并在地图上显示。此外，该移动应用程序还支持朋友之间的文本消息传递，并会在地图上显示他们以及他们的照片和名字。本专题讲座适合希望了解如何将应用程序的内容与应用程序用户的当前位置进行捆绑的开发人员。参会者将了解：- 如何使用Java ME定位API- 如何在Java ME应用程序中使用谷歌地图服务- 如何使用Java ME通用连接框架- 如何使用可视化工具来设计应用程序的流和UI。<br />
</span><span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp; <em>笔者：我一直都没关注过嵌入式或移动类应用，但现在这样的应用越来越普遍了，身边不少同事与朋友也在使用iPhone，或基于<a href="http://www.android.com/">Android</a>的智能手机，这都显示出手机应用的巨大市场潜力。而基于位置的移动应用也是方兴未艾(玩过<a href="http://foursquare.com/">Foursquare</a>吗？)，所以我这次也想去试试水。不过遗憾的是，这次没有<a href="http://www.android.com/">Google Android</a>的相关主题，难倒还是由于Oracle对Google的侵权诉讼？！大家还是应以和为贵。</em></span><br />
<span style="font-size: 10pt;">
<br />
<strong><span style="font-size: 12pt;">6. 杂想</span></strong><br />
&nbsp;&nbsp;&nbsp; 当年Sun被Oracle收购时，我还颇有几分感慨。无论是Java程序设计语言，还是<a href="http://www.sparc.org/">SPARC</a>处理器，以及<a href="http://hub.opensolaris.org/bin/view/Main/">Solaris/OpenSolaris</a>，在技术上都是同类中的佼佼者，但在商业上都未能成功。在软件方面，作为Java的创造者，Sun从Java中获得的收益不如IBM，还不得不开源了它的主要软件产品(如<a href="http://hub.opensolaris.org/bin/view/Main/">Solaris</a>，<a href="http://www.netbeans.org/">NetBeans</a>)，甚至于Java也被迫开源了--<a href="http://openjdk.java.net/">OpenJDK</a>。而在硬件方面，Sun的服务器，SPARC处理器也是曲高和寡，市场占用率很低。<br />
&nbsp;&nbsp;&nbsp; 此外，对Java发展有重要贡献的人物，如<a href="http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683">Effective Java</a>的作者<a href="http://en.wikipedia.org/wiki/Joshua_Bloch">Joshua Bloch</a>，Java之父<a href="http://nighthacks.com/roller/jag/">Games Gosling</a>，也相继离开了Sun/Oracle。回想当年，我第一次参加SunTechDays(JavaChina 2005)时，还有幸与Games Gosling有一张合影。可惜，在Oracle举办的会议中也许就再也看不到这位和蔼的大胡子老爹了;-(<br />
<br />
&nbsp;&nbsp;&nbsp; 由于工作原因，我不会参加明天(2010.12.13)下午的开幕式，不过明天下午的专题本来也很少，所以不参加也关系不大。我会为每一天的参会经历写一篇博文，记录自己的所见，所闻，所思，所感，还会附上图片，请大家持续关注。<br />
<strong><span style="font-size: 12pt;"><br />
请关注我的系列博文--<a href="http://www.blogjava.net/jiangshachina/category/27188.html">JavaOne/SunTechDays</a>。</span></strong><br />
<br />
</span><img src ="http://www.blogjava.net/jiangshachina/aggbug/340183.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jiangshachina/" target="_blank">Sha Jiang</a> 2010-12-12 20:55 <a href="http://www.blogjava.net/jiangshachina/archive/2010/12/12/340183.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android 101--安装(译)</title><link>http://www.blogjava.net/jiangshachina/archive/2010/10/11/334478.html</link><dc:creator>Sha Jiang</dc:creator><author>Sha Jiang</author><pubDate>Mon, 11 Oct 2010 13:43:00 GMT</pubDate><guid>http://www.blogjava.net/jiangshachina/archive/2010/10/11/334478.html</guid><wfw:comment>http://www.blogjava.net/jiangshachina/comments/334478.html</wfw:comment><comments>http://www.blogjava.net/jiangshachina/archive/2010/10/11/334478.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/jiangshachina/comments/commentRss/334478.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jiangshachina/services/trackbacks/334478.html</trackback:ping><description><![CDATA[<div align="center"><span style="font-size: 10pt;"><strong><span style="font-size: 14pt;">Android 101 -- 安装</span></strong></span><br />
</div>
<span style="font-size: 10pt;">这是<a href="http://java.dzone.com/">JavaLobby</a>中Android 101系列博文中的<a href="http://java.dzone.com/articles/android-101-system-setup">第二篇</a>，介绍了如何安装Android开发环境。对于我这个Android门外汉来说，至少学习到了一点儿新知识，希望大家也能如此。(2010.10.11最后更新)<br />
<br />
在本系列的上一篇文章，我们看过了Android框架的基本概念。在这篇文章中，我们看看如何在系统中进行Android安装。我假设你已经安装Java超过5年了。为了更方便些，你应该安装Eclipse作为你的开发IDE。<br />
<strong><span style="font-size: 12pt;">设置Android SDK</span></strong><br />
从<a href="http://d.android.com/sdk/index.html">http://d.android.com/sdk/index.html</a>中下载Android SDK。<br />
下载后，将zip文件解压到硬盘的某个路径上。你可以将这个SDK路径加到系统PATH变量中，但这是可选的。<br />
运行SDK安装程序。在Windows中就是<strong>SDK Manager.exe</strong>，而在其它平台中你需要运行<strong>tools/android</strong>。该程序允许你安装SDK组件，例如文档，平台，插件式类库和USB驱动。<br />
<img src="http://www.blogjava.net/images/blogjava_net/jiangshachina/android101/andrsetup_01.PNG" alt="" border="0" /><br />
<br />
一般地，你会想在这儿选择任何东西，以便你能为任何Android目标平台编写应用。<br />
<br />
<strong><span style="font-size: 12pt;">开发工具</span></strong><br />
安装的下一步是在你的Eclipse实例中安装Android开发工具包。最好的方法是使用Help/Install New Software菜单中的升级管理器。只需添加一个指向<a href="https://dl-ssl.google.com/android/eclipse">https://dl-ssl.google.com/android/eclipse</a>的新的升级站点即可。<br />
<img src="http://www.blogjava.net/images/blogjava_net/jiangshachina/android101/andrsetup_02.PNG" alt="" border="0" /><br />
<br />
<img src="http://www.blogjava.net/images/blogjava_net/jiangshachina/android101/andrsetup_03.PNG" alt="" border="0" /><br />
一旦完成了安装，你还需要重启Eclipse。<br />
<br />
<strong><span style="font-size: 12pt;">第一个Android工程</span></strong><br />
现在你已经准备好进行Android开发了。<br />
首先你要让Eclipse知道到哪里去找Android SDK。打开首选项对话框，点击Android项，设置Android SDK的安装路径：<br />
<img src="http://www.blogjava.net/images/blogjava_net/jiangshachina/android101/andrsetup_04.PNG" alt="" border="0" /><br />
<br />
最后一步就是确保你有一个运行Android应用的AVD(Android虚拟设备)。你可以使用AVD管理器来做到这一点：<br />
<img src="http://www.blogjava.net/images/blogjava_net/jiangshachina/android101/andrsetup_05.PNG" alt="" border="0" /><br />
<br />
当使用New Project向导时，你就有机会去创建Android工程了：<br />
<img src="http://www.blogjava.net/images/blogjava_net/jiangshachina/android101/andrsetup_06.PNG" alt="" border="0" /><br />
<br />
从这儿你能创建一个针对特定Android SDK的工程：<br />
<img src="http://www.blogjava.net/images/blogjava_net/jiangshachina/android101/andrsetup_07.PNG" alt="" border="0" /><br />
<br />
如果你点击下一步，你还可以创建一个Android测试工程以测试你的应用程序。<br />
在工程中，你还可以看到新创建的活动：<br />
</span>
<div style="background-color: rgb(238, 238, 238); font-size: 13px; border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; width: 98%;"><span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);">&nbsp;com.dzone.android.app;<br />
<br />
</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;android.app.Activity;<br />
</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;android.os.Bundle;<br />
<br />
</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;FirstActivity&nbsp;</span><span style="color: rgb(0, 0, 255);">extends</span><span style="color: rgb(0, 0, 0);">&nbsp;Activity&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);">&nbsp;Called&nbsp;when&nbsp;the&nbsp;activity&nbsp;is&nbsp;first&nbsp;created.&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;onCreate(Bundle&nbsp;savedInstanceState)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">super</span><span style="color: rgb(0, 0, 0);">.onCreate(savedInstanceState);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setContentView(R.layout.main);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<br />
<span style="font-size: 10pt;">
我们将稍作修改，创建自己的所使用的视图：<br />
</span>
<div style="background-color: rgb(238, 238, 238); font-size: 13px; border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; width: 98%;"><span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);">&nbsp;com.dzone.android.app;<br />
<br />
</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;android.app.Activity;<br />
</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;android.os.Bundle;<br />
</span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;android.widget.TextView;<br />
<br />
</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;FirstActivity&nbsp;</span><span style="color: rgb(0, 0, 255);">extends</span><span style="color: rgb(0, 0, 0);">&nbsp;Activity&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);">&nbsp;Called&nbsp;when&nbsp;the&nbsp;activity&nbsp;is&nbsp;first&nbsp;created.&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;onCreate(Bundle&nbsp;savedInstanceState)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">super</span><span style="color: rgb(0, 0, 0);">.onCreate(savedInstanceState);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TextView&nbsp;view&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;TextView(</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;view.setText(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">A&nbsp;New&nbsp;App</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setContentView(view);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<span style="font-size: 10pt;"><br />
为了看看这是否能工作，点击Run As/Android application。这会启动Android模拟器，并运行你新创建的应用程序。<br />
<img src="http://www.blogjava.net/images/blogjava_net/jiangshachina/android101/andrsetup_08.PNG" alt="" border="0" /><br />
<br />
既然，你已经在系统安装好了Android，本系列的后继文件将会带你看看编写你自己的Android应用的过程。<br />
<br />
</span>
<img src ="http://www.blogjava.net/jiangshachina/aggbug/334478.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jiangshachina/" target="_blank">Sha Jiang</a> 2010-10-11 21:43 <a href="http://www.blogjava.net/jiangshachina/archive/2010/10/11/334478.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android 101--基础(译)</title><link>http://www.blogjava.net/jiangshachina/archive/2010/10/07/333917.html</link><dc:creator>Sha Jiang</dc:creator><author>Sha Jiang</author><pubDate>Thu, 07 Oct 2010 13:25:00 GMT</pubDate><guid>http://www.blogjava.net/jiangshachina/archive/2010/10/07/333917.html</guid><wfw:comment>http://www.blogjava.net/jiangshachina/comments/333917.html</wfw:comment><comments>http://www.blogjava.net/jiangshachina/archive/2010/10/07/333917.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jiangshachina/comments/commentRss/333917.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jiangshachina/services/trackbacks/333917.html</trackback:ping><description><![CDATA[<div align="center"><span style="font-size: 10pt;"><strong><span style="font-size: 14pt;">Android 101 -- 基础</span></strong></span><br />
</div>
<span style="font-size: 10pt;">这是<a href="http://java.dzone.com">JavaLobby</a>中Android 101系列博文中的<a href="http://java.dzone.com/articles/android-101-basics">第一篇</a>，介绍了Android开发的基本概念。对于我这个Android门外汉来说，至少学习到了一点儿新知识，希望大家也能如此。(2010.10.07最后更新)<br />
<br />
&nbsp;&nbsp;&nbsp; 在当前的软件开发世界中，编写移动应用已变得非常流行了。对开发框架的选择还不太多，可用的智能手机的数量也有限。尽管编写运行在iOS上的应用十分流行，但Android已经获得了Java开发者们的关注。在之后的若干篇文章中，我将采取一些步骤帮助你入门Android开发。但在我们开始编码之前，让我们先看看Android开发的一些核心原理。<br />
<br />
<strong><span style="font-size: 12pt;">什么是Android？</span></strong><br />
下面这张来自于在线的开发者手册的图片展示了Android操作系统的架构：<br />
<img src="http://www.blogjava.net/images/blogjava_net/jiangshachina/system-architecture.jpg" alt="" border="0" /><br />
Android构建在<strong>Linux内核</strong>之上，Linux内核会管理典型的操作系统服务。<strong>Android运行时环境</strong>基于Dalvik虚拟机(目前Oracle 正给予许多关注的东西)。Dalvik是Java虚拟机的一个瘦身后的变种，它基于Apache Harmony的Java实现。不提供JavaME，Swing或AWT组件；相反地，Android提供它自己的组件库。<br />
&nbsp;&nbsp;&nbsp; 还有一些由C/C++编写的<strong>本地类库</strong>。Surface Manager处理针对展现子系统的访问，而媒体类库提供了针对最流行音频和视频格式的播放功能。<br />
&nbsp;&nbsp;&nbsp;
<strong>应用框架</strong>是大部分开发者所感兴趣的，它提供了创建合格Android移动应用所需的API和服务。<br />
<br />
<strong><span style="font-size: 12pt;">Android核心概念</span></strong><br />
如前所述，应用框架拥有开发者创建应用程序所需的一切。下面是主要概念的纲要：<br />
<strong>活动</strong><br />
一个活动是一个用户界面屏幕。一个应用程序在应用的执行过程中可以有一个或多个活动。你所创建的每一个活动可以拥有一个它自己的窗口以进行图形绘制。<br />
<strong>服务</strong><br />
服务作为后台任务运行，它没有可视化的表现形式。与活动一样，服务运行在主应用进程线程中，但服务常会派生出其它的线程来执行任务，而不会影响其它应用的运行。服务的典型例子就是音乐播放器，当它在播放列表中的歌时，你的手机还可以做其它事情。<br />
<strong>内容提供器</strong><br />
内容提供器是一个客户化API，它允许读写特定的数据集。它就允许不同的应用彼此之间共享数据。内容提供器都是ContentProvider基类的子类，ContentProvider提供一个访问数据的标准接口。应用程序不能直接调用ContentProvider的实现，转而要使用 ContentResolver对象，该对象可以访问任何ContentProvider实现。<br />
<strong>Intent</strong><br />
Intent是一个特定的活动，例如发送电子信件，播放歌曲，或发起一次联系。<br />
<strong>资源</strong><br />
Android应用拼图中的最后一块就是资源--应用程序需要访问或展示的图片，文本或非编码的信息。<br />
<br />
<strong><span style="font-size: 12pt;">活动生命周期</span></strong><br />
下图展示了一个活动在其生命周期中的不同状态：<br />
<img src="http://www.blogjava.net/images/blogjava_net/jiangshachina/activity_lifecycle.png" alt="" border="0" /><br />
当你不能控制状态间的转换时，你可以通过onX()方法，像onStart()，onResume()等等，来获知状态的改变。你可以重写这些方法以使应用程序能恰当地对这些状态作出反应。<br />
<br />
<strong><span style="font-size: 12pt;">下一步</span></strong><br />
现在你已对Android应用是如何组成的有了更好的理解，这为开始真正的开发作好了准备。下一篇文章将带你看看系统设置。<br />
<br />
</span>
<img src ="http://www.blogjava.net/jiangshachina/aggbug/333917.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jiangshachina/" target="_blank">Sha Jiang</a> 2010-10-07 21:25 <a href="http://www.blogjava.net/jiangshachina/archive/2010/10/07/333917.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android = Java(译)</title><link>http://www.blogjava.net/jiangshachina/archive/2010/08/22/329582.html</link><dc:creator>Sha Jiang</dc:creator><author>Sha Jiang</author><pubDate>Sun, 22 Aug 2010 11:49:00 GMT</pubDate><guid>http://www.blogjava.net/jiangshachina/archive/2010/08/22/329582.html</guid><wfw:comment>http://www.blogjava.net/jiangshachina/comments/329582.html</wfw:comment><comments>http://www.blogjava.net/jiangshachina/archive/2010/08/22/329582.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jiangshachina/comments/commentRss/329582.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jiangshachina/services/trackbacks/329582.html</trackback:ping><description><![CDATA[<div align="center"><strong><span style="font-size: 10pt;"><span style="font-size: 14pt;">Android = Java</span></span></strong><br />
</div>
<span style="font-size: 10pt;">近期Java社区正热议Oracle对Google的侵权诉讼，恰巧前几日在<a href="http://www.java.net/">java.net</a>中看到一篇<a href="http://weblogs.java.net/blog/opinali/archive/2010/08/17/android-java">博文</a>，文章作者也借此事件表达了Android=Java的观点。由于我对Java移动开发、Android都没太关注过，文章细细读来，有些许进益，译在此处，可能对大家也有帮助。(2010.08.22最后更新)<br />
<br />
&nbsp;&nbsp;&nbsp; Java社区正忙于讨论Orace针对Google Android平台的专利诉讼。我已在多个场合道出了我的观点，但还是需要一个评论性的文章来重复一下我在每个场合中都作出的相同评论...所以，本博文会将我的想法竹筒倒豆子般地和盘托出。<br />
<br />
<strong><span style="font-size: 12pt;">第八个千禧年问题：Android=Java？</span></strong><br />
&nbsp;&nbsp;&nbsp; 几日前，有声明称有研究者已证明了P!=NP，这导致了编程社区中的极大热忱--至少是直到两天前，当第一个评阅者指出了该证据中几处错误时。在我的计算机科学专业中我已学过这门课，但不能否认地是，我不懂高等数据以至于不能理解这些证明(P=NP?是克雷数学研究所的千禧年问题之一就是一个很好的理由)。所以，让我们谈谈一个更为简单的等式：<strong>Android是否等价于Java？</strong>注意，我说的不是<em><strong>等于</strong></em>，而是<em><strong>等价</strong></em>，就如同P=NP那样。<br />
<br />
<strong><span style="font-size: 12pt;">等价的类/字节码格式</span></strong><br />
&nbsp;&nbsp;&nbsp; 在许多层面上，Android = Java是明显正确的。Android应用使用Java语言编写，使用JDK中的javac编译器(或其等价品，如ECJ)进行编译。这就产生了标准的 Java字节码(<em>.class</em>文件)。然后，这些文件被转化成Android的.dex文件，实际上就是Java类的另一种不同格式的文件罢了。但你也能将GIF图像转化成优质的PNG格式，尽管这两种图像文件的字节码流完全不同，但它们都同样的优秀。<br />
&nbsp;&nbsp;&nbsp; 等价的文件格式有大量的实现细节，常常是为了优化。例如，如果我们不需要复杂且不同的跨框架压缩技术，仅仅是满足于低效率的视频流，我们就能避免所有违反MPEGLA视频编码专利的麻烦了。<br />
&nbsp;&nbsp;&nbsp; Android设计不同的类文件出于多种动机；但绕开Sun的知识产权肯定是主因。不管怎样，Google不能远离Java。这两种类文件格式非常等价。它们只是在低层次的数据结构方面不同，但它们的语法是一致的，也存储完全相同的信息。我可以肯定JavaSE或JavaME的VM能很容易地在它的系统类加载器中加入一个.dex解析器去加载"Android类"。<br />
&nbsp;&nbsp;&nbsp; Android SDK<strong>依赖</strong>于<em>.java -&gt; .class -&gt; .dex</em>转换，这一转换精于细节且是无损的。"无损"是非常重要：虽然GIF=PNG，但有损的JPG文件则不能完全相等--它不能解码出完全相同的信息。如果 JVM和Dalvik真是完全独立的，你就很难写出一个相对简单的工具无妥协的去将编译后的代码从一种形式转换到另一种形式：没有信息丢失；当为了补偿在一个VM所拥有而在另一个VM却没有的重要特性时；转换后的文件不会变大；当按照一个VM的核心API去实现另一个VM的核心API时，不需要额外的运行时层。<br />
&nbsp;&nbsp;&nbsp; (<em>我知道dx翻译器有多么的复杂。我已看过它的源代码。字节码翻译器很大，它是一个完整的反编译/重编译器，完全使用SSA构建。但这种翻译只是在理论上比较细微；但在设计上，从Java到Dalvik字节码的影射还是平滑的。栈相对于寄存器架构只是在优化细节方面有所不同；而在关键方面，如VM层的类型系统，则是一致的。</em>) <br />
<br />
<strong><span style="font-size: 12pt;">等价的虚拟机</span></strong><br />
&nbsp;&nbsp;&nbsp; 也能很容易的证明Dalvik=JVM。不仅仅是在源代码或字节码格式方面：它们的运行时对应部分也是如此。一旦Dalvik VM加载了一个"Android类"，<strong>它走起来像Java类，叫起来也像Java类</strong>。如果你懂Java编程(能了解其高级和底层细节)，你就懂 Android编程。只是一个学习新API和框架理论的问题罢了。它们是等价的系统。<br />
&nbsp;&nbsp;&nbsp; 还记得Microsoft的.NET吗？当.NET被介绍出来时，Java社区很快就公开抨击.NET只是Java的翻版。当时我也在那群抨击的人群中，但现在我知道这么做会更好些。然而.NET是一个庞大的翻版；C# 1.0语言。区别任一语言程序的最方便方法就是风格规范--如，<em>toString()</em>相对于<em>ToString()</em>。但在更关键的VM规范方面，Microsoft做了很好的功课。CLR，CLI和核心框架都完全不同于Java，所以我们不能说JVM=CLR。你不能使用一个简单的文件格式转换器工具作用于被编译的Java类，然后将获得信息直接运行在纯粹的.NET运行时环境上。<br />
&nbsp;&nbsp;&nbsp; 想要证据吗？只要看看<a href="http://www.java.net/">IKVM</a>。这是一个非常有趣的项目，它能使Java跨越编译运行在.NET环境中，所以你的Java代码可不经过修改运行在CLR之上(或其它同等的.NET运行时环境，如Mono)...但<a>IKVM</a>并<strong>不是</strong>一个简单的类dx文件转换器。对于任何超过HelloWorld的应用程序，将 Java类及其核心API适配转换到.NET是非常复杂的。每个平台的内在特性，像反射，安全，并发，异常处理，字节码规范，I/O及其它核心API，在特性上都非常相似，但在细枝末节处则完全不同--强行让IKVM......，则Java代码能运行在.NET VM上。这也需要一个非常庞大的额外的运行时层，基本上要把全部的OpenJDK源代码适配到JavaSE API。我追踪IKVM的开发已有多年了--通过阅读极棒的<a href="http://weblog.ikvm.net/">IKVM Blog</a>--所以我有一个需要作出大量努力的好主意去将Java代码和JavaSE应用适配到.NET。(该工作还没全完成；已完成的部分则常有些性能问题。) <br />
&nbsp;&nbsp;&nbsp; (<em>旧有的<strike>Visual J++</strike> Visula J#并不是一个简单的Java-.NET解释器。我不会讨论它，但完全可以说Visual J#对Java的兼容要大大劣于哪怕是非常早期的IKVM版本。</em>) <br />
&nbsp;&nbsp;&nbsp; 在讨论中我引入了P=NP的例子；有些人可能会引入图灵等价，并说任何图灵完备的平台/语言/VM都是相互等价的。确实如此，但和我们要讨论的问题并不相干。图灵模型过于通用；如果仅按表面意思来使用它将会摧毁整个软件专利系统(尽管这不是坏事！)。我们需要先在沙盘中勾勒出JVM等价的轮廓，与图灵等价相比，这更接近于实际需要。依我的观点，无论是细微的二进制格式翻译，甚至于上层的源代码和运行时兼容，都可以明确地将Android置于Java等价的阵线中。<br />
<br />
<strong><span style="font-size: 12pt;">等价的API与运行时环境</span></strong><br />
&nbsp;&nbsp;&nbsp; Android使用了许多JavaSE API的子集。这些(来自于Harmony的)API是全新的实现，但它们将JavaSE作为模型。如果不是由于TCK协议的问题，Harmony甚至会获得JavaSE认证。并不能改变Harmony与JavaSE API是完全等价的这一事实--这是故意为之，并非偶然。正如JRuby名人Charles Nutter最近写到的：<br />
&nbsp;&nbsp;&nbsp; Android支持一个粗糙(但庞大的)Java 1.5类库子集。这个子集足够的大，只需要很少的限制，<strong>就能使得如JRuby这般复杂的项目基本上无需修改就可运行在Android上</strong>。<br />
&nbsp;&nbsp;&nbsp; 看起来，Dalvik足够接近JVM，它应该就完全遵从大部分JVM的规范，包括完整及非常细节的JMM(Android支持Java风格的线程与并发，直至高级的<em>java.util.concurrent</em>包)。有太多"Dalvik是一个新的VM"或"Dalvik不能运行Java类"的话(在讨论该问题的90%的博客和论坛中都会发现这样的言论)。<br />
<br />
<strong><span style="font-size: 12pt;">最后的思考</span></strong><br />
&nbsp;&nbsp;&nbsp; 本篇并不是关于Oracle针对Google诉讼的是非曲直。我将会忽略(可能会删除)任何跑题的评论(不在Android=Java这一论题之内)。对于"Android与Java完全不相干"这一无意义的言论我只能表示厌恶；Google和Android的拥趸们必须找到比这更好的论证。<br />
&nbsp;&nbsp;&nbsp; (<em>当诉讼的全部细节和结果出来之前，对这一诉讼的将来我保留自己的全部判断。除非你有内部消息(我没有)，<strong>请不要太天真</strong>。<a href="http://www.java.net/blog/fabriziogiudici/archive/2010/08/13/oracle-vs-google-stay-cool">保持冷静</a>！我们真的不知道 Oracle或Google的全部意图和计划。自从2007年Google首次发布Android(这导致了JavaME生态系统的极大分裂)，虽然 Sun十分愤怒但仍不得不夹着尾巴，我们不知道这幕后的故事。我不会认同任何价值数以十亿计，且由股东控制的公司所持的利己主义的动机。</em>) <br />
&nbsp;&nbsp;&nbsp; 我不认为Google创建一个基于Java但偏离Java甚远的平台(如.NET所做的那样)是无竞争力的。在保持对已有Java代码和类库巨大兼容性，Java人才及Java工具链之间的平衡性的意愿时，Dalvik和Android框架会让你获得尽可能多的好处。<br />
&nbsp;&nbsp;&nbsp; 显然，Android=Java不能在双方面都包含进来(不是双射)。每个平台都有一些独一无二的 API，当然，Android是一个完整的操作系统，它包括一个基于Linux的内核，图形和电话栈，等等。我显然只谈及普通的部分：基于Java的用户空间/应用框架要依赖Java源代码和类(无论是哪种格式的)，API(包含数以千计的通用JavaSE API)，以及非常引人注目的类Java的虚拟机。对Android与其它Java平台关系的准确描述可能要使用到版本或测评的概念。我记得一个博客说过像"Android没有'J'"这样的话。好的，还不晚：我的建议是将Android的名称修改为Java GE(Java Google Edition)。这就能一劳永逸地消除困惑;-)<br />
<br />
</span>
<img src ="http://www.blogjava.net/jiangshachina/aggbug/329582.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jiangshachina/" target="_blank">Sha Jiang</a> 2010-08-22 19:49 <a href="http://www.blogjava.net/jiangshachina/archive/2010/08/22/329582.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>