﻿<?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-Android Guy-随笔分类-Android入门</title><link>http://www.blogjava.net/gaolei-xj/category/51622.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 18 Feb 2013 03:56:41 GMT</lastBuildDate><pubDate>Mon, 18 Feb 2013 03:56:41 GMT</pubDate><ttl>60</ttl><item><title> Android中关于布局文件延迟加载控件ViewStub</title><link>http://www.blogjava.net/gaolei-xj/archive/2013/02/17/395348.html</link><dc:creator>anthony</dc:creator><author>anthony</author><pubDate>Sun, 17 Feb 2013 07:41:00 GMT</pubDate><guid>http://www.blogjava.net/gaolei-xj/archive/2013/02/17/395348.html</guid><wfw:comment>http://www.blogjava.net/gaolei-xj/comments/395348.html</wfw:comment><comments>http://www.blogjava.net/gaolei-xj/archive/2013/02/17/395348.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gaolei-xj/comments/commentRss/395348.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gaolei-xj/services/trackbacks/395348.html</trackback:ping><description><![CDATA[<div>
<div style="font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 14px; text-align: left; background-color: #ffffff; color: #2c2c2c; font-family: 宋体, 'Arial Narrow', arial, serif; line-height: 28px; ">&nbsp;&nbsp;&nbsp;&nbsp; ViewStub 是一个不可见的，大小为0的View，最佳用途就是实现View的延迟加载，在需要的时候再加载View，可Java中常见的性能优化方法延迟加载一样。</div>
<div style="font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; margin: 0px; padding: 0px; font-size: 14px; text-align: left; background-color: #ffffff; color: #2c2c2c; font-family: 宋体,'Arial Narrow',arial,serif; line-height: 28px;">&nbsp;&nbsp; &nbsp; 当调用ViewStub的setVisibility函数设置为可见或则调用 inflate初始化该View的时候，ViewStub引用的资源开始初始化，然后引用的资源替代ViewStub自己的位置填充在ViewStub的 位置。因此在没有调用setVisibility(int) 或则 inflate()函数之前 ViewStub一种存在组件树层级结构中，但是由于ViewStub非常轻量级，这对性能影响非常小。 可以通过ViewStub的inflatedId属性来重新定义引用的layout id。 例如：<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">ViewStub&nbsp;</span><span style="color: #FF0000; ">android:id</span><span style="color: #0000FF; ">="@+id/stub"</span><span style="color: #FF0000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:inflatedId</span><span style="color: #0000FF; ">="@+id/subTree"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout</span><span style="color: #0000FF; ">="@layout/mySubTree"</span><span style="color: #FF0000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_width</span><span style="color: #0000FF; ">="120dip"</span><span style="color: #FF0000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_height</span><span style="color: #0000FF; ">="40dip"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000ff;">/&gt;</span></div>
</div>
</div>
<div>
<pre style="font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: #f7f7f7; margin-top: 0px; color: #006600; font-family: 'courier new', courier, monospace; line-height: 1.5; padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; overflow-x: auto; overflow-y: auto; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #dddddd; border-right-color: #dddddd; border-bottom-color: #dddddd; border-left-color: #dddddd; border-image: initial; text-align: -webkit-auto; "><span style="color: #000088; "><span style="color: #2c2c2c; font-family: 宋体, 'Arial Narrow', arial, serif; line-height: 28px; text-align: left; white-space: normal; background-color: #ffffff; ">上面定义的ViewStub ，可以通过id &#8220;stub&#8221;来找到，在初始化资源&#8220;mySubTree&#8221;后，stub从父组件中删除，然后"mySubTree"替代stub的位置。初始资源"mySubTree"得到的组件可以通过inflatedId 指定的id "subTree"引用。 然后初始化后的资源被填充到一个120dip宽、40dip高的地方。</span></span></pre>
</div>
<br />
<div>
<pre style="font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: #f7f7f7; margin-top: 0px; color: #006600; font-family: 'courier new', courier, monospace; line-height: 1.5; padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; overflow-x: auto; overflow-y: auto; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #dddddd; border-right-color: #dddddd; border-bottom-color: #dddddd; border-left-color: #dddddd; border-image: initial; text-align: -webkit-auto; "><span style="color: #000088; "><span style="color: #333333; font-family: Verdana; font-size: 13px; line-height: 20px; text-align: left; white-space: normal; background-color: #ffffff; ">推荐使用下面的方式来初始化ViewStub：</span></span></pre>
</div>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">ViewStub&nbsp;stub&nbsp;=&nbsp;(ViewStub)&nbsp;findViewById(R.id.stub);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;View&nbsp;inflated&nbsp;=&nbsp;stub.inflate();</span></div><br /><br /><div><pre style="font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: #f7f7f7; margin-top: 0px; color: #006600; font-family: 'courier new', courier, monospace; line-height: 1.5; padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; overflow-x: auto; overflow-y: auto; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #dddddd; border-right-color: #dddddd; border-bottom-color: #dddddd; border-left-color: #dddddd; border-image: initial; text-align: -webkit-auto; "><span style="color: #2c2c2c; font-family: 宋体, 'Arial Narrow', arial, serif; line-height: 28px; text-align: left; white-space: normal; background-color: #ffffff; ">当调用inflate()函数的时候，ViewStub 被引用的资源替代，并且返回引用的view。 这样程序可以直接得到引用的view而不用再次调用函数 findViewById()来查找了。</span></pre></div><br /><br />activity_main.xml:<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">LinearLayout&nbsp;</span><span style="color: #FF0000; ">xmlns:android</span><span style="color: #0000FF; ">="http://schemas.android.com/apk/res/android"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:tools</span><span style="color: #0000FF; ">="http://schemas.android.com/tools"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;android:layout_width</span><span style="color: #0000FF; ">="match_parent"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;android:layout_height</span><span style="color: #0000FF; ">="match_parent"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;android:orientation</span><span style="color: #0000FF; ">="vertical"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;android:paddingBottom</span><span style="color: #0000FF; ">="@dimen/activity_vertical_margin"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;android:paddingLeft</span><span style="color: #0000FF; ">="@dimen/activity_horizontal_margin"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;android:paddingRight</span><span style="color: #0000FF; ">="@dimen/activity_horizontal_margin"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;android:paddingTop</span><span style="color: #0000FF; ">="@dimen/activity_vertical_margin"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;tools:context</span><span style="color: #0000FF; ">=".MainActivity"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;静态加载布局文件&nbsp;</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; "><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">include<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF0000; ">android:layout_width</span><span style="color: #0000FF; ">="wrap_content"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_height</span><span style="color: #0000FF; ">="wrap_content"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;layout</span><span style="color: #0000FF; ">="@layout/my_sub_tree"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;动态加载布局文件&nbsp;</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; "><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">ViewStub<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF0000; ">android:id</span><span style="color: #0000FF; ">="@+id/stub"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_width</span><span style="color: #0000FF; ">="wrap_content"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_height</span><span style="color: #0000FF; ">="wrap_content"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:inflatedId</span><span style="color: #0000FF; ">="@+id/subTree"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout</span><span style="color: #0000FF; ">="@layout/my_sub_tree"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">Button<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF0000; ">android:id</span><span style="color: #0000FF; ">="@+id/button_show"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_width</span><span style="color: #0000FF; ">="wrap_content"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_height</span><span style="color: #0000FF; ">="wrap_content"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:text</span><span style="color: #0000FF; ">="动态加载布局"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">Button<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF0000; ">android:id</span><span style="color: #0000FF; ">="@+id/button_hidden"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_width</span><span style="color: #0000FF; ">="wrap_content"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_height</span><span style="color: #0000FF; ">="wrap_content"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:text</span><span style="color: #0000FF; ">="动态隐藏布局"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /><br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">LinearLayout</span><span style="color: #0000FF; ">&gt;</span></div><br /><br />my_sub_tree.xml:<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml&nbsp;version="1.0"&nbsp;encoding="utf-8"</span><span style="color: #0000FF; ">?&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">LinearLayout&nbsp;</span><span style="color: #FF0000; ">xmlns:android</span><span style="color: #0000FF; ">="http://schemas.android.com/apk/res/android"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;android:layout_width</span><span style="color: #0000FF; ">="match_parent"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;android:layout_height</span><span style="color: #0000FF; ">="match_parent"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;android:orientation</span><span style="color: #0000FF; ">="vertical"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">RatingBar<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF0000; ">android:id</span><span style="color: #0000FF; ">="@+id/ratingBar"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_width</span><span style="color: #0000FF; ">="wrap_content"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_height</span><span style="color: #0000FF; ">="wrap_content"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /><br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">LinearLayout</span><span style="color: #0000FF; ">&gt;</span></div><br />MainActivity.java:<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span><span style="color: #000000; ">&nbsp;com.example.android_viewstub;<br /><br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;android.app.Activity;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;android.os.Bundle;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;android.view.Menu;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;android.view.View;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;android.view.View.OnClickListener;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;android.view.ViewStub;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;android.widget.Button;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;android.widget.RatingBar;<br /><br /></span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;*&nbsp;Demo描述:&nbsp;利用ViewStub显示和隐藏布局&nbsp;ViewStub的引入:&nbsp;在开发的时候,有些布局是要根据条件而动态显示,达到一个布局两用的效果,<br />&nbsp;*&nbsp;运用View.VISIBLE和View.GONE去改变布局的可见性.&nbsp;这样的做法显然是没什么多大的问题,优点逻辑清晰,控制灵活,但缺点就是耗费资源<br />&nbsp;*&nbsp;在setContentView()或者用inflate加载布局文件时无论View是否<br />&nbsp;*&nbsp;被设置为View.GONE和View.VISIBLE,都会创建对象,占用一定程度上的内存,所以在考虑优化程序的时候，<br />&nbsp;*&nbsp;尽量避免资源浪费，降低程序的资源占有量，提高响应速度，提升软件的用户体验<br />&nbsp;*&nbsp;<br />&nbsp;*&nbsp;推荐的做法是使用android.view.ViewStub.&nbsp;ViewStub是一个轻量级的View,它一个看不见的,不占布局位置,占用资源非常小的控件.<br />&nbsp;*&nbsp;ViewStub是一个隐藏的,不占用内存空间的视图对象,它可以在运行时延迟加载布局资源文件当&nbsp;ViewStub可见,或者调用<br />&nbsp;*&nbsp;inflate()函数时,才会加载这个布局资源文件&nbsp;注意的问题:&nbsp;ViewStub只能用来Inflate一个布局文件,而不是某个具体的View<br />&nbsp;*&nbsp;<br />&nbsp;*&nbsp;遇到的问题:&nbsp;报错&nbsp;ViewStub&nbsp;must&nbsp;have&nbsp;a&nbsp;non-null&nbsp;ViewGroup&nbsp;viewParent&nbsp;原因:<br />&nbsp;*&nbsp;官方文档:viewstub不能反复inflate,只能inflate一次<br />&nbsp;* </span><span style="color: #008000; "><br />&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;MainActivity&nbsp;</span><span style="color: #0000FF; ">extends</span><span style="color: #000000; ">&nbsp;Activity&nbsp;</span><span style="color: #0000FF; ">implements</span><span style="color: #000000; ">&nbsp;OnClickListener&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;ViewStub&nbsp;mViewStub;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;Button&nbsp;mShowButton;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;Button&nbsp;mHiddenButton;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">protected</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;onCreate(Bundle&nbsp;savedInstanceState)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">super</span><span style="color: #000000; ">.onCreate(savedInstanceState);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setContentView(R.layout.activity_main);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;findView();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bindView();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;findView()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mViewStub&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(ViewStub)&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.findViewById(R.id.stub);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mShowButton&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(Button)&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.findViewById(R.id.button_show);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mHiddenButton&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(Button)&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.findViewById(R.id.button_hidden);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;bindView()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mShowButton.setOnClickListener(</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mHiddenButton.setOnClickListener(</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">boolean</span><span style="color: #000000; ">&nbsp;onCreateOptionsMenu(Menu&nbsp;menu)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getMenuInflater().inflate(R.menu.main,&nbsp;menu);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;onClick(View&nbsp;v)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">switch</span><span style="color: #000000; ">&nbsp;(v.getId())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">case</span><span style="color: #000000; ">&nbsp;R.id.button_show:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;View&nbsp;inflated&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;mViewStub.inflate();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RatingBar&nbsp;ratingBar&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(RatingBar)&nbsp;inflated<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.findViewById(R.id.ratingBar);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ratingBar.setRating(</span><span style="color: #000000; ">4</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;mViewStub.setVisibility(View.VISIBLE);</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">case</span><span style="color: #000000; ">&nbsp;R.id.button_hidden:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mViewStub.setVisibility(View.GONE);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">default</span><span style="color: #000000; ">:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}<br /></span></div><br /><br /><img src ="http://www.blogjava.net/gaolei-xj/aggbug/395348.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gaolei-xj/" target="_blank">anthony</a> 2013-02-17 15:41 <a href="http://www.blogjava.net/gaolei-xj/archive/2013/02/17/395348.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>android 完全退出应用程序</title><link>http://www.blogjava.net/gaolei-xj/archive/2012/12/24/393425.html</link><dc:creator>anthony</dc:creator><author>anthony</author><pubDate>Mon, 24 Dec 2012 15:11:00 GMT</pubDate><guid>http://www.blogjava.net/gaolei-xj/archive/2012/12/24/393425.html</guid><wfw:comment>http://www.blogjava.net/gaolei-xj/comments/393425.html</wfw:comment><comments>http://www.blogjava.net/gaolei-xj/archive/2012/12/24/393425.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gaolei-xj/comments/commentRss/393425.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gaolei-xj/services/trackbacks/393425.html</trackback:ping><description><![CDATA[<div><p style="color: #000000; font-family: 微软雅黑; font-size: 18px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android程序中如果有很多activity，又没有在跳转过程中全都finish，很可能在最后退出程序时，当前的activity结束了，但是又 跳转到activity栈的下一个activity。例如从A-B-C,在跳转过程中没有finish掉B，那么从C退出程序时，就会跳到B的界面。</p><p style="color: #000000; font-family: 微软雅黑; font-size: 18px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><br /></p><p style="color: #000000; font-family: 微软雅黑; font-size: 18px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最理想的解决办法就是每次在调用startActivity(intent)之前finish当前的activity，但是如果在下一个activity 又要回到上一个activity，就需要new一个新的activity了。如果刚好这个activity需要加载很多图片和信息，例如一个 listactivity或者含有一个gallery，那么用户体验性就很差，每次按返回键都要重新加载。那么有没办法解决完全退出程序的方法，同时又能 保证用户体验性呢？</p><p style="color: #000000; font-family: 微软雅黑; font-size: 18px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><br /></p><p style="color: #000000; font-family: 微软雅黑; font-size: 18px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 网上比较流行的方法是定义栈，写一个ExitApplication类，利用单例模式管理Activity，在每个在Activity的 onCreate()方法中调用ExitApplication.getInstance().addActivity(this)方法,在退出时调用 ExitApplication.getInstance().exit()方法，就可以完全退出应用程序了。</p></div>&nbsp;<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">package</span><span style="color: #000000; ">&nbsp;com.gaolei.study;<br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.util.LinkedList;<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.util.List;<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;android.app.Activity;<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;android.app.Application;<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;MyApplication&nbsp;</span><span style="color: #0000FF; ">extends</span><span style="color: #000000; ">&nbsp;Application&nbsp;{<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;MyApplication&nbsp;instance;<br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;List</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">Activity</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;activityList&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;LinkedList</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">Activity</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">();<br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;MyApplication()&nbsp;{<br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;单例模式获取唯一的MyApplication实例</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;MyApplication&nbsp;getInstance()&nbsp;{<br /></span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;instance)&nbsp;{<br /></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;instance&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;MyApplication();<br /></span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;instance;<br /></span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;添加Activity到容器中</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">27</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;addActivity(Activity&nbsp;activity)&nbsp;{<br /></span><span style="color: #008080; ">28</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;activityList.add(activity);<br /></span><span style="color: #008080; ">29</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">30</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">31</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;遍历所有Activity并finish</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">32</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;exit()&nbsp;{<br /></span><span style="color: #008080; ">33</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(Activity&nbsp;activity&nbsp;:&nbsp;activityList)&nbsp;{<br /></span><span style="color: #008080; ">34</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;activity.finish();<br /></span><span style="color: #008080; ">35</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">36</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.exit(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">37</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">38</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">39</span>&nbsp;<span style="color: #000000; "></span></div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <div><div style="color: #000000; font-family: 微软雅黑; font-size: 18px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; ">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 每个Activity类中onCreate()方法中调用 ExitApplication.getInstance().addActivity(Activity activity)方法。在某一个Activity界面退出应用程序时，只要调用 ExitApplication.getInstance().exit()方法，就可以在完全退出应用程序。</div><div style="color: #000000; font-family: 微软雅黑; font-size: 18px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "></div><div style="color: #000000; font-family: 微软雅黑; font-size: 18px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; ">当然也可以写一个BaseActivity继承Activity, 重写onCreate()方法,然后所有activity都继承它。</div></div><img src ="http://www.blogjava.net/gaolei-xj/aggbug/393425.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gaolei-xj/" target="_blank">anthony</a> 2012-12-24 23:11 <a href="http://www.blogjava.net/gaolei-xj/archive/2012/12/24/393425.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> android实现边框圆角</title><link>http://www.blogjava.net/gaolei-xj/archive/2012/12/19/393231.html</link><dc:creator>anthony</dc:creator><author>anthony</author><pubDate>Wed, 19 Dec 2012 15:51:00 GMT</pubDate><guid>http://www.blogjava.net/gaolei-xj/archive/2012/12/19/393231.html</guid><wfw:comment>http://www.blogjava.net/gaolei-xj/comments/393231.html</wfw:comment><comments>http://www.blogjava.net/gaolei-xj/archive/2012/12/19/393231.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gaolei-xj/comments/commentRss/393231.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gaolei-xj/services/trackbacks/393231.html</trackback:ping><description><![CDATA[<div fc05="" fc11="" nbw-blog="" ztag=""  js-fs2"="" style="font-family: 微软雅黑; font-size: 18px; line-height: normal; "><p><strong>1. </strong>在drawable 下新建 shape.xml 文件</p><div id="">Xml代码 &nbsp;:<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000FF; ">?&gt;</span><br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">shape&nbsp;</span><span style="color: #FF0000; ">xmlns:android</span><span style="color: #0000FF; ">="http://schemas.android.com/apk/res/android"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;android:shape</span><span style="color: #0000FF; ">="rectangle"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;填充的颜色&nbsp;</span><span style="color: #008000; ">--&gt;</span><br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">solid&nbsp;</span><span style="color: #FF0000; ">android:color</span><span style="color: #0000FF; ">="#FFFFFF"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;设置矩形的四个角为弧形&nbsp;</span><span style="color: #008000; ">--&gt;</span><br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;android:radius&nbsp;弧形的半径&nbsp;</span><span style="color: #008000; ">--&gt;</span><br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">corners&nbsp;</span><span style="color: #FF0000; ">android:radius</span><span style="color: #0000FF; ">="7dip"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br /><span style="color: #008080; ">10</span>&nbsp;<br /><span style="color: #008080; ">11</span>&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">shape</span><span style="color: #0000FF; ">&gt;</span></div><br /><p>&nbsp;android:radius为角的弧度，值越大角越圆。</p>我们还可以把四个角设定成不同的角度，方法为：<br />&nbsp;<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">corners<br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #800000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF0000; ">android:bottomLeftRadius</span><span style="color: #0000FF; ">="20dp"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:bottomRightRadius</span><span style="color: #0000FF; ">="0dp"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">4</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:topLeftRadius</span><span style="color: #0000FF; ">="1dp"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">5</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:topRightRadius</span><span style="color: #0000FF; ">="20dp"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span></div></div></div><div fc05="" fc11="" nbw-blog="" ztag=""  js-fs2"="" style="font-family: 微软雅黑; font-size: 18px; line-height: normal; "><p><br /><span style="color: red; ">2.1设置成0dp无效，2.1以上版本可以，如果无效的话那就只能设成1dp了。&nbsp;</span><br /><br /><br /><strong>2.</strong>设置引用</p><p>&nbsp;&nbsp; &nbsp;&nbsp;android:background="@drawable/shape"</p><p>&nbsp;</p><p><strong><em>EditText 其它属性</em></strong></p><p><strong></strong></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:hint="请输入用户名" &lt;!-- 设置提示文本&nbsp;--&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:drawableLeft="@drawable/ic_launcher" &lt;!-- 设置文本框左边小图标&nbsp;--&gt;<br /><br />例子:<br /><br /></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml&nbsp;version="1.0"&nbsp;encoding="utf-8"</span><span style="color: #0000FF; ">?&gt;</span><br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">LinearLayout&nbsp;</span><span style="color: #FF0000; ">xmlns:android</span><span style="color: #0000FF; ">="http://schemas.android.com/apk/res/android"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;android:layout_width</span><span style="color: #0000FF; ">="fill_parent"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;android:layout_height</span><span style="color: #0000FF; ">="fill_parent"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;android:orientation</span><span style="color: #0000FF; ">="vertical"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">EditText<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #800000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF0000; ">android:layout_width</span><span style="color: #0000FF; ">="fill_parent"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_height</span><span style="color: #0000FF; ">="wrap_content"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:background</span><span style="color: #0000FF; ">="@drawable/shape"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:drawableLeft</span><span style="color: #0000FF; ">="@drawable/ic_launcher"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:drawablePadding</span><span style="color: #0000FF; ">="5dp"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:hint</span><span style="color: #0000FF; ">="Hello&nbsp;Android"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:padding</span><span style="color: #0000FF; ">="5dp"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br /><span style="color: #008080; ">15</span>&nbsp;<br /><span style="color: #008080; ">16</span>&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">LinearLayout</span><span style="color: #0000FF; ">&gt;</span></div><img src="http://www.blogjava.net/images/blogjava_net/gaolei-xj/arc.jpg" border="0" alt="" /><br /><br /><p>&nbsp;</p></div><img src ="http://www.blogjava.net/gaolei-xj/aggbug/393231.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gaolei-xj/" target="_blank">anthony</a> 2012-12-19 23:51 <a href="http://www.blogjava.net/gaolei-xj/archive/2012/12/19/393231.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse优化</title><link>http://www.blogjava.net/gaolei-xj/archive/2012/12/19/393230.html</link><dc:creator>anthony</dc:creator><author>anthony</author><pubDate>Wed, 19 Dec 2012 15:13:00 GMT</pubDate><guid>http://www.blogjava.net/gaolei-xj/archive/2012/12/19/393230.html</guid><wfw:comment>http://www.blogjava.net/gaolei-xj/comments/393230.html</wfw:comment><comments>http://www.blogjava.net/gaolei-xj/archive/2012/12/19/393230.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gaolei-xj/comments/commentRss/393230.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gaolei-xj/services/trackbacks/393230.html</trackback:ping><description><![CDATA[<div><div id="cnblogs_post_body"><p><span style="color: #000000;">1. 取消系统的自动折叠</span> </p> <p><span style="color: #000000;">Window-&gt;Preferences-&gt;</span> <span style="color: #000000;">Java-&gt;Editor-&gt;Folding: Enable folding<br /><br /></span><span style="color: #000000;">2. 取消按"."后自动激活提示功能。这样会有些提高速度</span> </p> <p><span style="color: #000000;">Window-&gt;Preferences-&gt;</span> Java-&gt;Editor-&gt;Content Assist: Enable auto activation<span style="color: #000000;"><br /></span><span style="color: #000000;"><br />3. 关闭不常用的工程<br />一些不常用的工程打开的时候，也会影响你正在使用工程的操作速度。<br /><br /></span><span style="color: #000000;">4. 设置启动参数<br />起动的时候 加上参数：<strong style="color: black; background-color: #ffff66;">eclipse</strong>.exe -vmargs -Xverify:none -XX:+UseParallelGC -XX:PermSize=20M <br />-Xms64M -</span> <span style="color: #000000;">Xmx200M<br />如果你的内存是1G的。可以将最后一个参数Xmx200M改为 </span><span style="color: #000000;">Xmx512M<br />这个在你的起动快捷键的属性里设置。</span><span style="color: #000000;"><br /><br /></span><span style="color: #000000;">6. 取消Plugin<br />进入Preferences把Plug-in Development&gt;Target Platform&gt;</span> <span style="color: #000000;">plug-in里跟自己无关或者暂且不用的plug<br />-in去掉勾选，我这里共400多个中去掉了100多个。<br /><br /></span><span style="color: #000000;">7. 设置Edit Mode<br />MyEclipse5.0.1GA_E3.2 之前的：Window-&gt;Preferences-&gt;--&gt;myeclipse-&gt;files &amp; Editors下把跟编辑有关的所有<br />的Edit Modes 设为</span> <span style="color: #000000;">Disable Design Mode<br /></span><span style="color: #000000;"><br />8. 设置视图<br />打开Customize Perspective里自己没用到的选项自己去掉勾选。</span></p> <p>5. 取消MyEclipse在启动时自动验证项目配置文件<br />默认情况下MyEclipse在启动的时候会自动验证每个项目的配置文件，这是 一个非常耗时的过程，可以在Preferences窗口依次选择MyEclipse -  Validation，然后在右侧的Validator列表中只保留 Manual 项就可以了。如果需要验证的时候只需要选中文件，然后右键选择  MyEclipse - Run Validation就可以了。</p>  <p>9. 去除不需要加载的模块<br />一个系统20%的功能往往能够满足80%的需求，MyEclipse也不例外，我们在大多数时候只需要20%的 系统功能，所以可以将一些不使用的模块禁止加载启动。通过Windows - Preferences打开配置窗口，依次选择左侧的General -  Startup and Shutdown，这个时候在右侧就显示出了Eclipse启动时加载的模块，可以根据自己的实际情况去除一些模块。</p></div></div><img src ="http://www.blogjava.net/gaolei-xj/aggbug/393230.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gaolei-xj/" target="_blank">anthony</a> 2012-12-19 23:13 <a href="http://www.blogjava.net/gaolei-xj/archive/2012/12/19/393230.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android开发之Eclipse快捷键大全</title><link>http://www.blogjava.net/gaolei-xj/archive/2012/09/17/387875.html</link><dc:creator>anthony</dc:creator><author>anthony</author><pubDate>Mon, 17 Sep 2012 03:11:00 GMT</pubDate><guid>http://www.blogjava.net/gaolei-xj/archive/2012/09/17/387875.html</guid><wfw:comment>http://www.blogjava.net/gaolei-xj/comments/387875.html</wfw:comment><comments>http://www.blogjava.net/gaolei-xj/archive/2012/09/17/387875.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gaolei-xj/comments/commentRss/387875.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gaolei-xj/services/trackbacks/387875.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当前行&nbsp;Ctrl+Alt+&#8595; 复制当前行到下一行(复制增加)Ctrl+Alt+&#8593; 复制当前行到上一行(复制增加)Alt+&#8595; 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)Alt+&#8593; 当前行和上面一行交互位置(同上)Alt+&#8592; 前一个编辑的页...&nbsp;&nbsp;<a href='http://www.blogjava.net/gaolei-xj/archive/2012/09/17/387875.html'>阅读全文</a><img src ="http://www.blogjava.net/gaolei-xj/aggbug/387875.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gaolei-xj/" target="_blank">anthony</a> 2012-09-17 11:11 <a href="http://www.blogjava.net/gaolei-xj/archive/2012/09/17/387875.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为应用添加多个Activity与参数传递</title><link>http://www.blogjava.net/gaolei-xj/archive/2012/05/19/378550.html</link><dc:creator>anthony</dc:creator><author>anthony</author><pubDate>Sat, 19 May 2012 02:50:00 GMT</pubDate><guid>http://www.blogjava.net/gaolei-xj/archive/2012/05/19/378550.html</guid><wfw:comment>http://www.blogjava.net/gaolei-xj/comments/378550.html</wfw:comment><comments>http://www.blogjava.net/gaolei-xj/archive/2012/05/19/378550.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gaolei-xj/comments/commentRss/378550.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gaolei-xj/services/trackbacks/378550.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/gaolei-xj/archive/2012/05/19/378550.html'>阅读全文</a><img src ="http://www.blogjava.net/gaolei-xj/aggbug/378550.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gaolei-xj/" target="_blank">anthony</a> 2012-05-19 10:50 <a href="http://www.blogjava.net/gaolei-xj/archive/2012/05/19/378550.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文件断点上传器</title><link>http://www.blogjava.net/gaolei-xj/archive/2012/05/19/378542.html</link><dc:creator>anthony</dc:creator><author>anthony</author><pubDate>Sat, 19 May 2012 01:21:00 GMT</pubDate><guid>http://www.blogjava.net/gaolei-xj/archive/2012/05/19/378542.html</guid><wfw:comment>http://www.blogjava.net/gaolei-xj/comments/378542.html</wfw:comment><comments>http://www.blogjava.net/gaolei-xj/archive/2012/05/19/378542.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gaolei-xj/comments/commentRss/378542.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gaolei-xj/services/trackbacks/378542.html</trackback:ping><description><![CDATA[<div><div style="color: #000000; font-family: 微软雅黑; font-size: 18px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在Android中上传文件可以采用HTTP方式，也可以采用Socket方式，但是HTTP方式不能上传大文件，这里介绍一种通过Socket方式来进行断点续传的方式，服务端会记录下文件的上传进度，当某一次上传过程意外终止后，下一次可以继续上传，这里用到的其实还是J2SE里的知识。</div><div style="color: #000000; font-family: 微软雅黑; font-size: 18px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个上传程序的原理是：客户端第一次上传时向服务端发送&#8220;Content-Length=35;filename=WinRAR_3.90_SC.exe;sourceid=&#8220;这种格式的字符串，服务端收到后会查找该文件是否有上传记录，如果有就返回已经上传的位置，否则返回新生成的sourceid以及position为0，类似&#8221;sourceid=2324838389;position=0&#8220;这样的字符串，客户端收到返回后的字符串后再从指定的位置开始上传文件。</div></div><img src ="http://www.blogjava.net/gaolei-xj/aggbug/378542.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gaolei-xj/" target="_blank">anthony</a> 2012-05-19 09:21 <a href="http://www.blogjava.net/gaolei-xj/archive/2012/05/19/378542.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>多线程断点下载器</title><link>http://www.blogjava.net/gaolei-xj/archive/2012/05/18/378527.html</link><dc:creator>anthony</dc:creator><author>anthony</author><pubDate>Fri, 18 May 2012 14:15:00 GMT</pubDate><guid>http://www.blogjava.net/gaolei-xj/archive/2012/05/18/378527.html</guid><wfw:comment>http://www.blogjava.net/gaolei-xj/comments/378527.html</wfw:comment><comments>http://www.blogjava.net/gaolei-xj/archive/2012/05/18/378527.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/gaolei-xj/comments/commentRss/378527.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gaolei-xj/services/trackbacks/378527.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用多线程断点续传下载器在下载的时候多个线程并发可以占用服务器端更多资源， 从而加快下载速度，在下载过程中记录每个线程已拷贝数据的数量，如果下载中断，比如无信号断线、电量不足等情况下，这就需要使用到断点续传功能，下次启动 时从记录位置继续下载，可避免重复部分的下载。这里采用数据库来记录下载的进度。断点续传1....&nbsp;&nbsp;<a href='http://www.blogjava.net/gaolei-xj/archive/2012/05/18/378527.html'>阅读全文</a><img src ="http://www.blogjava.net/gaolei-xj/aggbug/378527.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gaolei-xj/" target="_blank">anthony</a> 2012-05-18 22:15 <a href="http://www.blogjava.net/gaolei-xj/archive/2012/05/18/378527.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>多线程下载原理</title><link>http://www.blogjava.net/gaolei-xj/archive/2012/05/17/378442.html</link><dc:creator>anthony</dc:creator><author>anthony</author><pubDate>Thu, 17 May 2012 12:55:00 GMT</pubDate><guid>http://www.blogjava.net/gaolei-xj/archive/2012/05/17/378442.html</guid><wfw:comment>http://www.blogjava.net/gaolei-xj/comments/378442.html</wfw:comment><comments>http://www.blogjava.net/gaolei-xj/archive/2012/05/17/378442.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gaolei-xj/comments/commentRss/378442.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gaolei-xj/services/trackbacks/378442.html</trackback:ping><description><![CDATA[<div>&nbsp;&nbsp;&nbsp;&nbsp; 基本原理：利用HttpsURLConnection获取要下载文件的长度、头部等相关信息，并设置响应的头部信息。并且通过HttpsURLConnection获取输入流，将文件分成指定的块，每一块单独开辟一个线程完成数据的读取、写入。通过输入流读取下载文件的信息，然后将读取的信息用RandomAccessFile随机写入到本地文件中。同时，每个线程写入的数据都文件指针也就是写入数据的长度，需要保存在一个临时文件中。这样当本次下载没有完成的时候，下次下载的时候就从这个文件中读取上一次下载的文件长度，然后继续接着上一次的位置开始下载。并且将本次下载的长度写入到这个文件中。<br /><br /><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">package</span><span style="color: #000000; ">&nbsp;com.gaolei.download;<br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.io.File;<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.io.IOException;<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.io.InputStream;<br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.io.RandomAccessFile;<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.net.URL;<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;javax.net.ssl.HttpsURLConnection;<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;MulThreadDownload&nbsp;{<br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;Exception&nbsp;{<br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;path&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">http://192.168.0.1/videonews/QQWubiSetup.exe</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;MulThreadDownload().download(path,&nbsp;</span><span style="color: #000000; ">3</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;下载文件<br /></span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br /></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;path网络文件路径<br /></span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@throws</span><span style="color: #008000; ">&nbsp;Exception<br /></span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;download(String&nbsp;path,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;threadsize)&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;Exception&nbsp;{<br /></span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URL&nbsp;url&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;URL(path);<br /></span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpsURLConnection&nbsp;conn&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(HttpsURLConnection)&nbsp;url.openConnection();<br /></span><span style="color: #008080; ">27</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.setConnectTimeout(</span><span style="color: #000000; ">5000</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">28</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.setRequestMethod(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">GET</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">29</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(conn.getResponseCode()&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">200</span><span style="color: #000000; ">)&nbsp;{<br /></span><span style="color: #008080; ">30</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;length&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;conn.getContentLength();&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;获取网络文件的长度</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">31</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;file&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;File(getFilename(path));<br /></span><span style="color: #008080; ">32</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RandomAccessFile&nbsp;accessFile&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;RandomAccessFile(file,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">rwd</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;在本地生成一个长度相等的文件</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">33</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;accessFile.setLength(length);<br /></span><span style="color: #008080; ">34</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;accessFile.close();<br /></span><span style="color: #008080; ">35</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">36</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;计算每条线程负责下载的数据量</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">37</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;block&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;length&nbsp;</span><span style="color: #000000; ">%</span><span style="color: #000000; ">&nbsp;threadsize&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">?</span><span style="color: #000000; ">&nbsp;length&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;threadsize&nbsp;:&nbsp;length<br /></span><span style="color: #008080; ">38</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;threadsize&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">39</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;threadid&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;threadid&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;threadsize;&nbsp;threadid</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;{<br /></span><span style="color: #008080; ">40</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;DownloadThread(threadid,&nbsp;block,&nbsp;url,&nbsp;file).start();<br /></span><span style="color: #008080; ">41</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">42</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;{<br /></span><span style="color: #008080; ">43</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">下载失败！</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">44</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">45</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">46</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">47</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">48</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;DownloadThread&nbsp;</span><span style="color: #0000FF; ">extends</span><span style="color: #000000; ">&nbsp;Thread&nbsp;{<br /></span><span style="color: #008080; ">49</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">50</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;threadid;<br /></span><span style="color: #008080; ">51</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;block;<br /></span><span style="color: #008080; ">52</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;URL&nbsp;url;<br /></span><span style="color: #008080; ">53</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;File&nbsp;file;<br /></span><span style="color: #008080; ">54</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">55</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;DownloadThread(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;threadid,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;block,&nbsp;URL&nbsp;url,&nbsp;File&nbsp;file)&nbsp;{<br /></span><span style="color: #008080; ">56</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.threadid&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;threadid;<br /></span><span style="color: #008080; ">57</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.block&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;block;<br /></span><span style="color: #008080; ">58</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.url&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;url;<br /></span><span style="color: #008080; ">59</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.file&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;file;<br /></span><span style="color: #008080; ">60</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">61</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">62</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br /></span><span style="color: #008080; ">63</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;run()&nbsp;{<br /></span><span style="color: #008080; ">64</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;start&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;threadid&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;block;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;计算该线程从网络文件的什么位置开始下载</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">65</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;end&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(threadid&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;block&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;下载到网络文件的什么位置结束</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">66</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; "><br /></span><span style="color: #008080; ">67</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">&nbsp;{<br /></span><span style="color: #008080; ">68</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RandomAccessFile&nbsp;accessFile&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;RandomAccessFile(file,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">rwd</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;在本地生成一个长度相等的文件</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">69</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;accessFile.seek(start);<br /></span><span style="color: #008080; ">70</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpsURLConnection&nbsp;conn&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(HttpsURLConnection)&nbsp;url<br /></span><span style="color: #008080; ">71</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.openConnection();<br /></span><span style="color: #008080; ">72</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.setConnectTimeout(</span><span style="color: #000000; ">5000</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">73</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.setRequestMethod(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">GET</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">74</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.setRequestProperty(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Range</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">bytes=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;start&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">-</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;end);<br /></span><span style="color: #008080; ">75</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(conn.getResponseCode()&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">206</span><span style="color: #000000; ">)&nbsp;{<br /></span><span style="color: #008080; ">76</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;inStream&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;conn.getInputStream();<br /></span><span style="color: #008080; ">77</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">byte</span><span style="color: #000000; ">[]&nbsp;buffer&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">byte</span><span style="color: #000000; ">[</span><span style="color: #000000; ">1024</span><span style="color: #000000; ">];<br /></span><span style="color: #008080; ">78</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;len&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">79</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;((len&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;inStream.read(buffer))&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)&nbsp;{<br /></span><span style="color: #008080; ">80</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;accessFile.write(buffer,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;len);<br /></span><span style="color: #008080; ">81</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">82</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;accessFile.close();<br /></span><span style="color: #008080; ">83</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inStream.close();<br /></span><span style="color: #008080; ">84</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">85</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">第</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;(threadid&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">条线程已经下载完成！</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">86</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">&nbsp;(IOException&nbsp;e)&nbsp;{<br /></span><span style="color: #008080; ">87</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br /></span><span style="color: #008080; ">88</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">89</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">90</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">91</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">92</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">93</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">94</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;String&nbsp;getFilename(String&nbsp;path)&nbsp;{<br /></span><span style="color: #008080; ">95</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;path.substring(path.lastIndexOf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">96</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">97</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">98</span>&nbsp;<span style="color: #000000; "></span></div></div></div><img src ="http://www.blogjava.net/gaolei-xj/aggbug/378442.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gaolei-xj/" target="_blank">anthony</a> 2012-05-17 20:55 <a href="http://www.blogjava.net/gaolei-xj/archive/2012/05/17/378442.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在SQLite中使用事务</title><link>http://www.blogjava.net/gaolei-xj/archive/2012/05/16/378340.html</link><dc:creator>anthony</dc:creator><author>anthony</author><pubDate>Wed, 16 May 2012 13:00:00 GMT</pubDate><guid>http://www.blogjava.net/gaolei-xj/archive/2012/05/16/378340.html</guid><wfw:comment>http://www.blogjava.net/gaolei-xj/comments/378340.html</wfw:comment><comments>http://www.blogjava.net/gaolei-xj/archive/2012/05/16/378340.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gaolei-xj/comments/commentRss/378340.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gaolei-xj/services/trackbacks/378340.html</trackback:ping><description><![CDATA[<div><br /><span style="color: #000000; font-family: 微软雅黑; font-size: 18px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; display: inline ! important; float: none;">使用SQLiteDatabase的beginTransaction()方法可以开启一个事务，程序执行到endTransaction() 方法时会检查事务的标志是否为成功，如果为成功则提交事务，否则回滚事务。当应用需要提交事务，必须在程序执行到endTransaction()方法之前使用setTransactionSuccessful() 方法设置事务的标志为成功，如果不调用setTransactionSuccessful() 方法，默认会回滚事务。<br /><br /><div><span style="color: #000000; font-family: 微软雅黑; font-size: 18px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; display: inline !important; float: none; ">使用例子如下：</span></div></span><br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #000000; ">&nbsp;SQLiteDatabase&nbsp;db&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />.;<br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; ">db.beginTransaction();</span><span style="color: #008000; ">//</span><span style="color: #008000; ">开始事务</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #008000; "></span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;db.execSQL(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">insert&nbsp;into&nbsp;person(name,&nbsp;age)&nbsp;values(?,?)</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Object[]{</span><span style="color: #000000; ">"</span><span style="color: #000000; ">gaolei</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">22</span><span style="color: #000000; ">});<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;db.execSQL(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">update&nbsp;person&nbsp;set&nbsp;name=?&nbsp;where&nbsp;personid=?</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Object[]{</span><span style="color: #000000; ">"</span><span style="color: #000000; ">zhangsan</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">});<br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;db.setTransactionSuccessful();</span><span style="color: #008000; ">//</span><span style="color: #008000; ">调用此方法会在执行到endTransaction()&nbsp;时提交当前事务，如果不调用此方法会回滚事务</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">}&nbsp;</span><span style="color: #0000FF; ">finally</span><span style="color: #000000; ">&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;db.endTransaction();</span><span style="color: #008000; ">//</span><span style="color: #008000; ">由事务的标志决定是提交事务，还是回滚事务</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">}&nbsp;<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000;">db.close(); <br /></span></div></div><div><span style="color: #000000; font-family: 微软雅黑; font-size: 18px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; display: inline !important; float: none; ">上面两条SQL语句在同一个事务中执行。</span></div><img src ="http://www.blogjava.net/gaolei-xj/aggbug/378340.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gaolei-xj/" target="_blank">anthony</a> 2012-05-16 21:00 <a href="http://www.blogjava.net/gaolei-xj/archive/2012/05/16/378340.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>采用Pull解析器解析和生成XML内容</title><link>http://www.blogjava.net/gaolei-xj/archive/2012/05/13/378044.html</link><dc:creator>anthony</dc:creator><author>anthony</author><pubDate>Sun, 13 May 2012 07:38:00 GMT</pubDate><guid>http://www.blogjava.net/gaolei-xj/archive/2012/05/13/378044.html</guid><wfw:comment>http://www.blogjava.net/gaolei-xj/comments/378044.html</wfw:comment><comments>http://www.blogjava.net/gaolei-xj/archive/2012/05/13/378044.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gaolei-xj/comments/commentRss/378044.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gaolei-xj/services/trackbacks/378044.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> &nbsp;&nbsp;&nbsp; 除了可以使用 SAX和DOM解析XML文件，大家也可以使用Android内置的Pull解析器解析XML文件。 Pull解析器的运行方式与 SAX 解析器...&nbsp;&nbsp;<a href='http://www.blogjava.net/gaolei-xj/archive/2012/05/13/378044.html'>阅读全文</a><img src ="http://www.blogjava.net/gaolei-xj/aggbug/378044.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gaolei-xj/" target="_blank">anthony</a> 2012-05-13 15:38 <a href="http://www.blogjava.net/gaolei-xj/archive/2012/05/13/378044.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>把文件存放在SDCard</title><link>http://www.blogjava.net/gaolei-xj/archive/2012/05/09/377737.html</link><dc:creator>anthony</dc:creator><author>anthony</author><pubDate>Wed, 09 May 2012 12:35:00 GMT</pubDate><guid>http://www.blogjava.net/gaolei-xj/archive/2012/05/09/377737.html</guid><wfw:comment>http://www.blogjava.net/gaolei-xj/comments/377737.html</wfw:comment><comments>http://www.blogjava.net/gaolei-xj/archive/2012/05/09/377737.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gaolei-xj/comments/commentRss/377737.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gaolei-xj/services/trackbacks/377737.html</trackback:ping><description><![CDATA[<div><div style="color: #000000; font-family: 微软雅黑; font-size: 18px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用Activity的openFileOutput()方法保存文件，文件是存放在手机空间上，一般手机的存储空间不是很大，存放些小文件还行，如果要存放像视频这样的大文件，是不可行的。对于像视频这样的大文件，我们可以把它存放在SDCard。 SDCard是干什么的？你可以把它看作是移动硬盘或U盘。</div><div style="color: #000000; font-family: 微软雅黑; font-size: 18px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "></div><div style="color: #000000; font-family: 微软雅黑; font-size: 18px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在模拟器中使用SDCard，你需要先创建一张SDCard卡（当然不是真的SDCard，只是镜像文件）。创建SDCard可以在Eclipse创建模拟器时随同创建，也可以使用DOS命令进行创建，如下：</div><div style="color: #000000; font-family: 微软雅黑; font-size: 18px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; ">在Dos窗口中进入android SDK安装路径的tools目录，输入以下命令创建一张容量为2G的SDCard，文件后缀可以随便取，建议使用.img：</div><div style="color: #000000; font-family: 微软雅黑; font-size: 18px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; ">mksdcard 2048M D:\AndroidTool\sdcard.img</div></div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <div><p style="color: #000000; font-family: 微软雅黑; font-size: 18px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 要往SDCard存放文件，程序必须先判断手机是否装有SDCard，并且可以进行读写。<br />注意：访问SDCard必须在AndroidManifest.xml中加入访问SDCard的权限<br />if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File sdCardDir = Environment.getExternalStorageDirectory();//获取SDCard目录<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File saveFile = new File(sdCardDir, &#8220;gaolei.txt&#8221;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileOutputStream outStream = new FileOutputStream(saveFile);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outStream.write("abc".getBytes());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outStream.close();<br />}</p><p style="color: #000000; font-family: 微软雅黑; font-size: 18px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Environment.getExternalStorageState()方法用于获取SDCard的状态，如果手机装有SDCard，并且可以进行读写，</p><p style="color: #000000; font-family: 微软雅黑; font-size: 18px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; ">那么方法返回的状态等于Environment.MEDIA_MOUNTED。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p style="color: #000000; font-family: 微软雅黑; font-size: 18px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Environment.getExternalStorageDirectory()方法用于获取SDCard的目录，当然要获取SDCard的目录，你也可以这样写：<br />File sdCardDir = new File("/mnt/sdcard"); //获取SDCard目录<br />File saveFile = new File(sdCardDir, "gaolei.txt");&nbsp;<br />//上面两句代码可以合成一句： File saveFile = new File("/mnt/sdcard/gaolei.txt");<br />FileOutputStream outStream = new FileOutputStream(saveFile);<br />outStream.write("abc".getBytes());<br />outStream.close();</p><p style="color: #000000; font-family: 微软雅黑; font-size: 18px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><br /></p><p style="color: #000000; font-family: 微软雅黑; font-size: 18px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><img src="http://www.blogjava.net/images/blogjava_net/gaolei-xj/51.jpg" alt="" border="0" height="560" width="801" /></p><p style="color: #000000; font-family: 微软雅黑; font-size: 18px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><br /></p><p style="color: #000000; font-family: 微软雅黑; font-size: 18px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><img src="http://www.blogjava.net/images/blogjava_net/gaolei-xj/52.jpg" alt="" border="0" height="413" width="773" /><br /></p></div><img src ="http://www.blogjava.net/gaolei-xj/aggbug/377737.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gaolei-xj/" target="_blank">anthony</a> 2012-05-09 20:35 <a href="http://www.blogjava.net/gaolei-xj/archive/2012/05/09/377737.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>查看应用输出的错误信息与如何部署应用到真实手机</title><link>http://www.blogjava.net/gaolei-xj/archive/2012/05/06/377463.html</link><dc:creator>anthony</dc:creator><author>anthony</author><pubDate>Sun, 06 May 2012 01:40:00 GMT</pubDate><guid>http://www.blogjava.net/gaolei-xj/archive/2012/05/06/377463.html</guid><wfw:comment>http://www.blogjava.net/gaolei-xj/comments/377463.html</wfw:comment><comments>http://www.blogjava.net/gaolei-xj/archive/2012/05/06/377463.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gaolei-xj/comments/commentRss/377463.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gaolei-xj/services/trackbacks/377463.html</trackback:ping><description><![CDATA[<span style="font: 18px/normal 微软雅黑; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; float: none; display: inline !important; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">一、查看应用输出的错误信息<br />Window-&gt;Show View -&gt;Other-&gt;Android -&gt;LogCat<br /><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/gaolei-xj/11.jpg" /><br /><p style="font: 18px/normal 微软雅黑; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">&nbsp;</p><div style="padding: 4px 5px 4px 4px; border: 1px solid rgb(204, 204, 204); width: 98%; font-size: 13px; word-break: break-all; background-color: rgb(238, 238, 238);"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: rgb(0, 0, 0);">在Android程序中可以使用&nbsp;android.util.Log&nbsp;类来输出日志信息，该类提供了下列几个静态方法<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />Log.v(String&nbsp;tag,&nbsp;String&nbsp;msg);&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />Log.d(String&nbsp;tag,&nbsp;String&nbsp;msg);&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />Log.i(String&nbsp;tag,&nbsp;String&nbsp;msg);&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />Log.w(String&nbsp;tag,&nbsp;String&nbsp;msg);&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />Log.e(String&nbsp;tag,&nbsp;String&nbsp;msg);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />分别对应&nbsp;verbose,&nbsp;debug,&nbsp;info,&nbsp;warn,&nbsp;error</span></div><p style="font: 18px/normal 微软雅黑; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">&nbsp;</p><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/gaolei-xj/12png.png" width="75" height="132" /><br /><a style="font: 18px/normal 微软雅黑; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; cursor: pointer; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" title="另外" href="http://www.haogongju.net/tag/%E5%8F%A6%E5%A4%96" target="_blank">另外</a><span style="font: 18px/normal 微软雅黑; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; float: none; display: inline !important; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">还可以通过SDK提供的</span><a style="font: 18px/normal 微软雅黑; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; cursor: pointer; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" title="工具" href="http://www.haogongju.net/tag/%E5%B7%A5%E5%85%B7" target="_blank">工具</a><span style="font: 18px/normal 微软雅黑; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; float: none; display: inline !important; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">来看，命令是 adb logcat ，该命令</span><a style="font: 18px/normal 微软雅黑; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; cursor: pointer; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" title="执行" href="http://www.haogongju.net/tag/%E6%89%A7%E8%A1%8C" target="_blank">执行</a><span style="font: 18px/normal 微软雅黑; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; float: none; display: inline !important; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">后会以tail方式实时显示出所有的日志信息。<br /><br /><div style="font: 18px/normal 微软雅黑; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">二、如何部署应用到真实手机</div><div style="font: 18px/normal 微软雅黑; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">1）安装手机的驱动到pc上</div><div style="font: 18px/normal 微软雅黑; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">2）用一条USB连接线把手机连接到PC的USB接口上</div><div style="font: 18px/normal 微软雅黑; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">Window-&gt;Show View -&gt;Other-&gt;Android -&gt;Devices<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/gaolei-xj/12.jpg" /><br /><br /><div style="font: 18px/normal 微软雅黑; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><div>若手机驱动安装成功，则在这里有显示你的手机设备</div></div><div style="font: 18px/normal 微软雅黑; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><p>3&gt; 运行为android application，出现android device chooser界面，选择真实手机（如果没有启动模拟器的话，不会出现）。查看安装信息，在devices中双击设备。</p><p>4&gt; 软件发布，供用户安装。把软件打包为apk文件。Export&#8212;&gt;android application&#8212;&gt;创建密钥&#8212;&gt;安装文件放置位置&#8212;&gt;完成。</p><p>5&gt; 放入sd卡，在真机中用apk正常安装，安装时会提示（电话呼叫器）。</p><p><p>连上手机之前，打开devices视图，再连接手机，手机会出现在视图中。如果手机没出现，可能驱动没安装成功。</p><p>&nbsp;</p><p>连接手机可以通过屏幕监视工具asm.jar进行操作。</p><p>&nbsp;</p></div><br class="Apple-interchange-newline" /><br /><br /></div></span></span><img src ="http://www.blogjava.net/gaolei-xj/aggbug/377463.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gaolei-xj/" target="_blank">anthony</a> 2012-05-06 09:40 <a href="http://www.blogjava.net/gaolei-xj/archive/2012/05/06/377463.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>