﻿<?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-Terry Zou</title><link>http://www.blogjava.net/ZouYonghui/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 06:01:31 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 06:01:31 GMT</pubDate><ttl>60</ttl><item><title>搭建React环境，运行React项目</title><link>http://www.blogjava.net/ZouYonghui/archive/2020/04/16/435361.html</link><dc:creator>Terry Zou</dc:creator><author>Terry Zou</author><pubDate>Thu, 16 Apr 2020 07:25:00 GMT</pubDate><guid>http://www.blogjava.net/ZouYonghui/archive/2020/04/16/435361.html</guid><wfw:comment>http://www.blogjava.net/ZouYonghui/comments/435361.html</wfw:comment><comments>http://www.blogjava.net/ZouYonghui/archive/2020/04/16/435361.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ZouYonghui/comments/commentRss/435361.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ZouYonghui/services/trackbacks/435361.html</trackback:ping><description><![CDATA[1.必须安装nodejs<br />2.安装cnpm用cnpm替代npm<br />&nbsp; &nbsp; 地址：http://npm.taobao.org/<div><span style="white-space:pre">		</span>安装cnpm:</div><div><span style="white-space:pre">			</span>npm install -g cnpm --registry=https://registry.npm.taobao.org<br /><br /><div>3、用yarn替代npm</div><div><span style="white-space:pre">		</span>yarn的安装：</div><div><span style="white-space:pre">			</span>第一种方法：参考官方文档https://yarn.bootcss.com/</div><div><span style="white-space:pre">			</span>第二种方法：cnpm install -g yarn&nbsp; 或者 npm install -g yarn<br /><div>4、搭建React开发环境的第一种方法（老-现在推荐）：</div><div><span style="white-space:pre">	</span>https://reactjs.org/docs/create-a-new-react-app.html</div><div><span style="white-space:pre">	</span>1、必须要安装nodejs&nbsp; &nbsp; &nbsp;注意：安装nodejs稳定版本&nbsp; &nbsp; &nbsp; 教程中的nodejs版本:v8.11.2&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 教程中的npm版本:v5.6.0</div><div><span style="white-space:pre">	</span>2.安装脚手架工具&nbsp; &nbsp;（单文件组件项目生成工具）&nbsp; &nbsp;只需要安装一次</div><div><span style="white-space:pre">		</span>npm install -g create-react-app&nbsp; &nbsp;/&nbsp; cnpm install -g create-react-app</div><div><span style="white-space:pre">	</span>3.创建项目&nbsp; &nbsp;（可能创建多次）</div><div><span style="white-space:pre">		</span>找到项目要创建的目录：</div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;create-react-app reactdemo</div><div><span style="white-space:pre">	</span>4.cd&nbsp; 到项目里面<span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;cd&nbsp; reactdemo</div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;npm start&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;yarn start运行项目</div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;npm run build&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;yarn build 生成项目</div><div>5、搭建React的开发环境的第二种方法（新-未来推荐）：</div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;https://reactjs.org/docs/create-a-new-react-app.html</div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1、必须要安装nodejs&nbsp; &nbsp; &nbsp;注意：安装nodejs稳定版本&nbsp; &nbsp; &nbsp; 教程中的nodejs版本:v8.11.2&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 教程中的npm版本:v5.6.0</div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.安装脚手架工具并创建项目</div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;找到项目要创建的目录执行：</div><div><span style="white-space:pre">		</span>npx create-react-app reactdemo</div><div><span style="white-space:pre">	</span>4.cd&nbsp; 到项目里面<span style="white-space: pre;">	</span></div><div><span style="white-space:pre">	</span>&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;cd&nbsp; reactdemo</div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;npm start&nbsp; 运行项目（调试）</div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;npm run build 生成项目（发布）</div><div>npx介绍：</div><div><span style="white-space:pre">	</span>npm v5.2.0引入的一条命令（npx），引入这个命令的目的是为了提升开发者使用包内提供的命令行工具的体验。</div><div>详情：</div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;npx create-react-app reactdemo这条命令会临时安装 create-react-app 包，命令完成后create-react-app 会删掉，不会出现在 global 中。下次再执行，还是会重新临时安装。</div><div><span style="white-space:pre">	</span>npx 会帮你执行依赖包里的二进制文件。</div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;再比如 npx http-server 可以一句话帮你开启一个静态服务器</div></div></div><img src ="http://www.blogjava.net/ZouYonghui/aggbug/435361.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ZouYonghui/" target="_blank">Terry Zou</a> 2020-04-16 15:25 <a href="http://www.blogjava.net/ZouYonghui/archive/2020/04/16/435361.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring @PostConstruct 、@Autowired和Construct 顺序</title><link>http://www.blogjava.net/ZouYonghui/archive/2020/04/09/435331.html</link><dc:creator>Terry Zou</dc:creator><author>Terry Zou</author><pubDate>Thu, 09 Apr 2020 07:29:00 GMT</pubDate><guid>http://www.blogjava.net/ZouYonghui/archive/2020/04/09/435331.html</guid><wfw:comment>http://www.blogjava.net/ZouYonghui/comments/435331.html</wfw:comment><comments>http://www.blogjava.net/ZouYonghui/archive/2020/04/09/435331.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ZouYonghui/comments/commentRss/435331.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ZouYonghui/services/trackbacks/435331.html</trackback:ping><description><![CDATA[<span style="white-space: pre-wrap;"><font color="#cccccc" face="Consolas, Monaco, Andale Mono, Ubuntu Mono, monospace"><span style="background-color: #50556b; color: #ff0000;">@PostConstruct</span></font><font color="#333333" face="pingfang SC, helvetica neue, arial, hiragino sans gb, microsoft yahei ui, microsoft yahei, simsun, sans-serif"><span style="background-color: #ffffff;"><br /></span></font></span><pre class="prism-token token  language-javascript" style="box-sizing: border-box; list-style: inherit; margin-top: 0.5em; margin-bottom: 0.5em; padding: 1em; color: #cccccc; background: #50556b; border-radius: 3px; overflow: auto; font-family: Consolas, Monaco, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, monospace; overflow-wrap: normal; word-break: normal; line-height: 1.5; tab-size: 4; hyphens: none;">PostConstruct注释用于在完成依赖项注入以执行任何初始化之后需要执行的方法。必须在类投入使用之前调用此方法。
所有支持依赖注入的类都必须支持此注释。即使类没有请求注入任何资源，也必须调用使用PostConstruct注释的方法。
只有一个方法可以使用此批注进行批注。
应用PostConstruct注释的方法必须满足以下所有条件：除了拦截器之外，方法绝不能有任何参数，在这种情况下它采用Interceptor规范定义的InvocationContext对象。
在拦截器类上定义的方法必须具有以下签名之一：
<span class="token keyword" style="box-sizing: border-box; list-style: inherit; color: #cc99cd;">void</span> <span class="token operator" style="box-sizing: border-box; list-style: inherit; color: #67cdcc;">&lt;</span>METHOD<span class="token operator" style="box-sizing: border-box; list-style: inherit; color: #67cdcc;">&gt;</span>（InvocationContext）Object <span class="token operator" style="box-sizing: border-box; list-style: inherit; color: #67cdcc;">&lt;</span>METHOD<span class="token operator" style="box-sizing: border-box; list-style: inherit; color: #67cdcc;">&gt;</span>（InvocationContext）抛出异常注意：
PostConstruct拦截器方法不能抛出应用程序异常，但可以声明它抛出检查异常，包括java<span class="token punctuation" style="box-sizing: border-box; list-style: inherit;">.</span>lang<span class="token punctuation" style="box-sizing: border-box; list-style: inherit;">.</span>Exception，
如果相同的拦截器方法除了生命周期事件之外插入业务或超时方法。
如果PostConstruct拦截器方法返回一个值，容器将忽略它。
在非拦截器类上定义的方法必须具有以下签名：<span class="token keyword" style="box-sizing: border-box; list-style: inherit; color: #cc99cd;">void</span> <span class="token operator" style="box-sizing: border-box; list-style: inherit; color: #67cdcc;">&lt;</span>METHOD<span class="token operator" style="box-sizing: border-box; list-style: inherit; color: #67cdcc;">&gt;</span>（）应用PostConstruct的方法可以是<span class="token keyword" style="box-sizing: border-box; list-style: inherit; color: #cc99cd;">public</span>，<span class="token keyword" style="box-sizing: border-box; list-style: inherit; color: #cc99cd;">protected</span>，<span class="token keyword" style="box-sizing: border-box; list-style: inherit; color: #cc99cd;">package</span> <span class="token keyword" style="box-sizing: border-box; list-style: inherit; color: #cc99cd;">private</span>或<span class="token keyword" style="box-sizing: border-box; list-style: inherit; color: #cc99cd;">private</span>。
除应用程序客户端外，该方法绝不能是静态的。
该方法可能是最终的。如果该方法抛出一个未经检查的异常，那么该类绝不能投入使用，除非EJB可以处理异常甚至从它们恢复的EJB</pre><div><span style="color: #333333; font-family: &quot;pingfang SC&quot;, &quot;helvetica neue&quot;, arial, &quot;hiragino sans gb&quot;, &quot;microsoft yahei ui&quot;, &quot;microsoft yahei&quot;, simsun, sans-serif; white-space: pre-wrap; background-color: #ffffff;"><br />然后就会思考问题，这个注释是修饰初始化之后需要执行的方法，那么它和@Autowired、构造函数的执行顺序是什么呢？（当然注释中已经说明了PostConstruct注释用于在完成依赖项注入之后）<br /></span><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 />-->@Service<br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;BeanA&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;@Autowired<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;BeanB&nbsp;beanB;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;BeanA()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("这是Bean&nbsp;A&nbsp;的构造方法");<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;@PostConstruct<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;init()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("这是BeanA的&nbsp;init&nbsp;方法");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;beanB.testB();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</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 />-->@Service<br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;BeanB&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;@PostConstruct<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;init()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("这是BeanB&nbsp;的init&nbsp;方法");<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;BeanB()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("这是Bean&nbsp;B的&nbsp;构造方法");<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;testB()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("这是Bean&nbsp;B&nbsp;的&nbsp;testB&nbsp;方法");<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div><br />启动后输出:<br /><pre token=""  language-javascript"="" style="box-sizing: border-box; list-style: inherit; margin-top: 0.5em; margin-bottom: 0.5em; padding: 1em; color: #cccccc; background: #50556b; border-radius: 3px; overflow: auto; font-family: Consolas, Monaco, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, monospace; overflow-wrap: normal; word-break: normal; line-height: 1.5; tab-size: 4; hyphens: none;">这是Bean A 的构造方法 <br />这是Bean B的 构造方法 <br />这是BeanB 的init 方法 <br />这是BeanA的 init 方法 <br />这是Bean B 的 testB 方法<br /><br />所以得到结论： 构造方法 &gt;&nbsp;@Autowired &gt;&nbsp;@PostConstruct</pre></div><img src ="http://www.blogjava.net/ZouYonghui/aggbug/435331.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ZouYonghui/" target="_blank">Terry Zou</a> 2020-04-09 15:29 <a href="http://www.blogjava.net/ZouYonghui/archive/2020/04/09/435331.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring中的ApplicationListener的使用详解案例（观察者模式)</title><link>http://www.blogjava.net/ZouYonghui/archive/2020/04/09/435329.html</link><dc:creator>Terry Zou</dc:creator><author>Terry Zou</author><pubDate>Thu, 09 Apr 2020 06:47:00 GMT</pubDate><guid>http://www.blogjava.net/ZouYonghui/archive/2020/04/09/435329.html</guid><wfw:comment>http://www.blogjava.net/ZouYonghui/comments/435329.html</wfw:comment><comments>http://www.blogjava.net/ZouYonghui/archive/2020/04/09/435329.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ZouYonghui/comments/commentRss/435329.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ZouYonghui/services/trackbacks/435329.html</trackback:ping><description><![CDATA[<div>1、ApplicationContext</div><div>Spring的核心，Context我们通常解释为上下文环境。ApplicationContext则是应用的容器。 Spring把Bean（object）放在容器中，需要用就通过get方法取出来。在ApplicationContext接口的众多实现类中，有3个是我们经常用到的（见表1-1），并且使用这3个实现类也基本能满足我们Java EE应用开发中的绝大部分需求。</div><div><span style="color: #4d4d4d; font-family: &quot;Microsoft YaHei&quot;, &quot;SF Pro Display&quot;, Roboto, Noto, Arial, &quot;PingFang SC&quot;, sans-serif; font-size: 16px; background-color: #ffffff;">表1-1 ApplicationContext接口的常用实现类介绍<br /></span><fieldset><legend><span style="color: #4f4f4f; font-family: &quot;Microsoft YaHei&quot;, &quot;SF Pro Display&quot;, Roboto, Noto, Arial, &quot;PingFang SC&quot;, sans-serif; background-color: #f7f7f7;">ClassPathXmlApplicationContext</span></legend><div>从类路径ClassPath中寻找指定的XML配置文件，找到并装载完成ApplicationContext的实例化工作。例如： //装载单个配置文件实例化ApplicationContext容器</div><div>ApplicationContext cxt = new ClassPathXmlApplicationContext("applicationContext.xml");</div><div>//装载多个配置文件实例化ApplicationContext容器</div><div>String[] configs = {"bean1.xml","bean2.xml","bean3.xml"};</div><div>ApplicationContext cxt = new ClassPathXmlApplicationContext(configs);</div></fieldset><fieldset><legend><span style="color: #4f4f4f; font-family: &quot;Microsoft YaHei&quot;, &quot;SF Pro Display&quot;, Roboto, Noto, Arial, &quot;PingFang SC&quot;, sans-serif; background-color: #ffffff;">FileSystemXmlApplicationContext</span></legend><div>从指定的文件系统路径中寻找指定的XML配置文件，找到并装载完成ApplicationContext的实例化工作。例如：//装载单个配置文件实例化ApplicationContext容器</div><div>ApplicationContext cxt = new FileSystemXMLApplicationContext("beans.xml");</div><div>//装载多个配置文件实例化ApplicationContext容器</div><div>String[] configs = {"c:/beans1.xml","c:/beans2.xml"};</div><div>ApplicationContext cxt = new FileSystemXmlApplicationContext(configs);</div></fieldset><fieldset><legend><span style="color: #4f4f4f; font-family: &quot;Microsoft YaHei&quot;, &quot;SF Pro Display&quot;, Roboto, Noto, Arial, &quot;PingFang SC&quot;, sans-serif; background-color: #f7f7f7;">XmlWebApplicationContext</span></legend><div>从Web应用中寻找指定的XML配置文件，找到并装载完成ApplicationContext的实例化工作。这是为Web工程量身定制的，使用WebApplicationContextUtils类的getRequiredWebApplicationContext方法可在JSP与Servlet中取得IoC容器的引用</div></fieldset><span style="color: #4d4d4d; font-family: &quot;Microsoft YaHei&quot;, &quot;SF Pro Display&quot;, Roboto, Noto, Arial, &quot;PingFang SC&quot;, sans-serif; font-size: 16px; background-color: #ffffff;">2、ApplicationEvent<br /></span><span style="color: #4d4d4d; font-family: &quot;Microsoft YaHei&quot;, &quot;SF Pro Display&quot;, Roboto, Noto, Arial, &quot;PingFang SC&quot;, sans-serif; font-size: 16px; background-color: #ffffff;">是个抽象类，里面只有一个构造函数和一个长整型的timestamp。其源码如下<br /></span><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 />--><br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">abstract</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;ApplicationEvent&nbsp;<span style="color: #0000FF; ">extends</span>&nbsp;EventObject&nbsp;{<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; ">&nbsp;use&nbsp;serialVersionUID&nbsp;from&nbsp;Spring&nbsp;1.2&nbsp;for&nbsp;interoperability&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;serialVersionUID&nbsp;=&nbsp;7099057708183571937L;<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; ">&nbsp;System&nbsp;time&nbsp;when&nbsp;the&nbsp;event&nbsp;happened&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;timestamp;<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Create&nbsp;a&nbsp;new&nbsp;ApplicationEvent.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;source&nbsp;the&nbsp;object&nbsp;on&nbsp;which&nbsp;the&nbsp;event&nbsp;initially&nbsp;occurred&nbsp;(never&nbsp;{</span><span style="color: #808080; ">@code</span><span style="color: #008000; ">&nbsp;null})<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;ApplicationEvent(Object&nbsp;source)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">super</span>(source);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.timestamp&nbsp;=&nbsp;System.currentTimeMillis();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Return&nbsp;the&nbsp;system&nbsp;time&nbsp;in&nbsp;milliseconds&nbsp;when&nbsp;the&nbsp;event&nbsp;happened.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;getTimestamp()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">this</span>.timestamp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div><span style="color: #4d4d4d; font-family: &quot;Microsoft YaHei&quot;, &quot;SF Pro Display&quot;, Roboto, Noto, Arial, &quot;PingFang SC&quot;, sans-serif; font-size: 16px; background-color: #ffffff;"><br />3、ApplicationListener</span><br /><div><span style="font-size: 16px;">是一个接口，里面只有一个onApplicationEvent方法。如果在上下文中部署一个实现了ApplicationListener接口的bean,那么每当在一个ApplicationEvent发布到 ApplicationContext时，调用ApplicationContext.publishEvent()方法，这个bean得到通知。类似于Oberver设计模式。</span></div><div><span style="color: #4d4d4d; font-family: &quot;Microsoft YaHei&quot;, &quot;SF Pro Display&quot;, Roboto, Noto, Arial, &quot;PingFang SC&quot;, sans-serif; font-size: 16px; background-color: #ffffff;">其源码如下：</span></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 />--><br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">interface</span>&nbsp;ApplicationListener&lt;E&nbsp;<span style="color: #0000FF; ">extends</span>&nbsp;ApplicationEvent&gt;&nbsp;<span style="color: #0000FF; ">extends</span>&nbsp;EventListener&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Handle&nbsp;an&nbsp;application&nbsp;event.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;event&nbsp;the&nbsp;event&nbsp;to&nbsp;respond&nbsp;to<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;onApplicationEvent(E&nbsp;event);<br />&nbsp;<br />}</div>下面举个例子<br />自定义事件NotifyEvent:<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; ">import</span>&nbsp;org.springframework.context.ApplicationEvent;<br /><br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;NotifyEvent&nbsp;&nbsp;<span style="color: #0000FF; ">extends</span>&nbsp;ApplicationEvent&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;String&nbsp;email;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;String&nbsp;content;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;NotifyEvent(Object&nbsp;source){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">super</span>(source);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;NotifyEvent(Object&nbsp;source,String&nbsp;email,String&nbsp;content){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">super</span>(source);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.email&nbsp;=&nbsp;email;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.content&nbsp;=&nbsp;content;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;String&nbsp;getEmail()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;email;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;setEmail(String&nbsp;email)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.email&nbsp;=&nbsp;email;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;String&nbsp;getContent()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;content;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;setContent(String&nbsp;content)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.content&nbsp;=&nbsp;content;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div><br /><span style="color: #212529; font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;Helvetica Neue&quot;, Arial, &quot;Noto Sans&quot;, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;, &quot;Segoe UI Symbol&quot;, &quot;Noto Color Emoji&quot;; font-size: 16px; background-color: #ffffff;">定义监听器NotifyListener:<br /></span><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; ">import</span>&nbsp;org.springframework.context.ApplicationListener;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.context.annotation.Configuration;<br /><br />@Configuration<br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;NotifyListener&nbsp;<span style="color: #0000FF; ">implements</span>&nbsp;ApplicationListener&lt;NotifyEvent&gt;{<br />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;onApplicationEvent(NotifyEvent&nbsp;event)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("邮件地址："&nbsp;+&nbsp;event.getEmail());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("邮件内容："&nbsp;+&nbsp;event.getContent());<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div><span style="color: #212529; font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;Helvetica Neue&quot;, Arial, &quot;Noto Sans&quot;, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;, &quot;Segoe UI Symbol&quot;, &quot;Noto Color Emoji&quot;; font-size: 16px; background-color: #ffffff;"><br /></span><span style="color: #212529; font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, &quot;Helvetica Neue&quot;, Arial, &quot;Noto Sans&quot;, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;, &quot;Segoe UI Symbol&quot;, &quot;Noto Color Emoji&quot;; font-size: 16px; background-color: #ffffff;">单元测试类ListenerTest：</span></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: #0000FF; ">import</span>&nbsp;org.junit.Test;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.junit.runner.RunWith;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.beans.factory.annotation.Autowired;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.boot.test.context.SpringBootTest;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.test.context.junit4.SpringRunner;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.web.context.WebApplicationContext;<br /><br />@RunWith(SpringRunner.<span style="color: #0000FF; ">class</span>)<br />@SpringBootTest(classes&nbsp;=&nbsp;ServerLauncher.<span style="color: #0000FF; ">class</span>,&nbsp;webEnvironment&nbsp;=&nbsp;SpringBootTest.WebEnvironment.RANDOM_PORT)<br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;ListenerTest&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;@Autowired<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;WebApplicationContext&nbsp;webApplicationContext;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;@Test<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;testListener(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NotifyEvent&nbsp;event&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;NotifyEvent("object","abc@qq.com","This&nbsp;is&nbsp;the&nbsp;content");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;webApplicationContext.publishEvent(event);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div><img src ="http://www.blogjava.net/ZouYonghui/aggbug/435329.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ZouYonghui/" target="_blank">Terry Zou</a> 2020-04-09 14:47 <a href="http://www.blogjava.net/ZouYonghui/archive/2020/04/09/435329.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>@SpringBootApplication的使用</title><link>http://www.blogjava.net/ZouYonghui/archive/2020/04/09/435328.html</link><dc:creator>Terry Zou</dc:creator><author>Terry Zou</author><pubDate>Thu, 09 Apr 2020 01:10:00 GMT</pubDate><guid>http://www.blogjava.net/ZouYonghui/archive/2020/04/09/435328.html</guid><wfw:comment>http://www.blogjava.net/ZouYonghui/comments/435328.html</wfw:comment><comments>http://www.blogjava.net/ZouYonghui/archive/2020/04/09/435328.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ZouYonghui/comments/commentRss/435328.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ZouYonghui/services/trackbacks/435328.html</trackback:ping><description><![CDATA[<p style="margin-top: 10px; margin-bottom: 10px; font-family: &quot;black Verdana&quot;, Arial, Helvetica, sans-serif; background-color: #ffffff;">之前用户使用的是3个注解注解他们的main类。分别是@Configuration,@EnableAutoConfiguration,@ComponentScan。由于这些注解一般都是一起使用，spring boot提供了一个统一的注解@SpringBootApplication。</p>
<p style="margin-top: 10px; margin-bottom: 10px; font-family: &quot;black Verdana&quot;, Arial, Helvetica, sans-serif; background-color: #ffffff;">@SpringBootApplication = (默认属性)@Configuration + @EnableAutoConfiguration + @ComponentScan。<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 />-->@SpringBootApplication&nbsp;<br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;ApplicationMain&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;main(String[]&nbsp;args)&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SpringApplication.run(Application.<span style="color: #0000FF; ">class</span>,&nbsp;args);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />}</div><p style="margin-top: 10px; margin-bottom: 10px; font-family: &quot;black Verdana&quot;, Arial, Helvetica, sans-serif; background-color: #ffffff;">分开解释@Configuration,@EnableAutoConfiguration,@ComponentScan。<br />1、@Configuration：提到@Configuration就要提到他的搭档@Bean。使用这两个注解就可以创建一个简单的spring配置类，可以用来替代相应的xml配置文件。<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 />-->&lt;beans&gt;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean&nbsp;id&nbsp;=&nbsp;"car"&nbsp;<span style="color: #0000FF; ">class</span>="com.test.Car"&gt;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="wheel"&nbsp;ref&nbsp;=&nbsp;"wheel"&gt;&lt;/property&gt;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/bean&gt;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean&nbsp;id&nbsp;=&nbsp;"wheel"&nbsp;<span style="color: #0000FF; ">class</span>="com.test.Wheel"&gt;&lt;/bean&gt;&nbsp;<br />&lt;/beans&gt;&nbsp;</div><p style="margin-top: 10px; margin-bottom: 10px; font-family: &quot;black Verdana&quot;, Arial, Helvetica, sans-serif; background-color: #ffffff;">&nbsp;相当于：<br /></p><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 />-->@Configuration&nbsp;<br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;Conf&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;@Bean&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Car&nbsp;car()&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Car&nbsp;car&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Car();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;car.setWheel(wheel());&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;car;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;@Bean&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Wheel&nbsp;wheel()&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Wheel();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />}</div><p style="margin-top: 10px; margin-bottom: 10px; font-family: &quot;black Verdana&quot;, Arial, Helvetica, sans-serif; background-color: #ffffff;">@Configuration的注解类标识这个类可以使用Spring IoC容器作为bean定义的来源。@Bean注解告诉Spring，一个带有@Bean的注解方法将返回一个对象，该对象应该被注册为在Spring应用程序上下文中的bean。<br /></p><p style="margin-top: 10px; margin-bottom: 10px; font-family: &quot;black Verdana&quot;, Arial, Helvetica, sans-serif; background-color: #ffffff;">2、@EnableAutoConfiguration：能够自动配置spring的上下文，试图猜测和配置你想要的bean类，通常会自动根据你的类路径和你的bean定义自动配置。</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: &quot;black Verdana&quot;, Arial, Helvetica, sans-serif; background-color: #ffffff;">3、@ComponentScan：会自动扫描指定包下的全部标有@Component的类，并注册成bean，当然包括@Component下的子注解@Service,@Repository,@Controller。</p><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><p><br />
</p>
</div><img src ="http://www.blogjava.net/ZouYonghui/aggbug/435328.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ZouYonghui/" target="_blank">Terry Zou</a> 2020-04-09 09:10 <a href="http://www.blogjava.net/ZouYonghui/archive/2020/04/09/435328.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>服务器连接</title><link>http://www.blogjava.net/ZouYonghui/archive/2015/07/13/426208.html</link><dc:creator>Terry Zou</dc:creator><author>Terry Zou</author><pubDate>Mon, 13 Jul 2015 14:10:00 GMT</pubDate><guid>http://www.blogjava.net/ZouYonghui/archive/2015/07/13/426208.html</guid><wfw:comment>http://www.blogjava.net/ZouYonghui/comments/426208.html</wfw:comment><comments>http://www.blogjava.net/ZouYonghui/archive/2015/07/13/426208.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ZouYonghui/comments/commentRss/426208.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ZouYonghui/services/trackbacks/426208.html</trackback:ping><description><![CDATA[<div><span style="font-size: 12px;">package com.zhihe.xqsh.utils;</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">import java.io.File;</span></div><div><span style="font-size: 12px;">import java.io.FileOutputStream;</span></div><div><span style="font-size: 12px;">import java.io.IOException;</span></div><div><span style="font-size: 12px;">import java.io.InputStream;</span></div><div><span style="font-size: 12px;">import java.io.UnsupportedEncodingException;</span></div><div><span style="font-size: 12px;">import java.util.Date;</span></div><div><span style="font-size: 12px;">import java.util.List;</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">import org.apache.http.HttpEntity;</span></div><div><span style="font-size: 12px;">import org.apache.http.HttpResponse;</span></div><div><span style="font-size: 12px;">import org.apache.http.HttpStatus;</span></div><div><span style="font-size: 12px;">import org.apache.http.HttpVersion;</span></div><div><span style="font-size: 12px;">import org.apache.http.NameValuePair;</span></div><div><span style="font-size: 12px;">import org.apache.http.client.ClientProtocolException;</span></div><div><span style="font-size: 12px;">import org.apache.http.client.HttpClient;</span></div><div><span style="font-size: 12px;">import org.apache.http.client.entity.UrlEncodedFormEntity;</span></div><div><span style="font-size: 12px;">import org.apache.http.client.methods.HttpGet;</span></div><div><span style="font-size: 12px;">import org.apache.http.client.methods.HttpPost;</span></div><div><span style="font-size: 12px;">import org.apache.http.conn.ClientConnectionManager;</span></div><div><span style="font-size: 12px;">import org.apache.http.conn.params.ConnManagerParams;</span></div><div><span style="font-size: 12px;">import org.apache.http.conn.params.ConnRouteParams;</span></div><div><span style="font-size: 12px;">import org.apache.http.conn.scheme.PlainSocketFactory;</span></div><div><span style="font-size: 12px;">import org.apache.http.conn.scheme.Scheme;</span></div><div><span style="font-size: 12px;">import org.apache.http.conn.scheme.SchemeRegistry;</span></div><div><span style="font-size: 12px;">import org.apache.http.conn.ssl.SSLSocketFactory;</span></div><div><span style="font-size: 12px;">import org.apache.http.impl.client.DefaultHttpClient;</span></div><div><span style="font-size: 12px;">import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;</span></div><div><span style="font-size: 12px;">import org.apache.http.impl.cookie.BasicClientCookie;</span></div><div><span style="font-size: 12px;">import org.apache.http.params.BasicHttpParams;</span></div><div><span style="font-size: 12px;">import org.apache.http.params.HttpConnectionParams;</span></div><div><span style="font-size: 12px;">import org.apache.http.params.HttpParams;</span></div><div><span style="font-size: 12px;">import org.apache.http.params.HttpProtocolParams;</span></div><div><span style="font-size: 12px;">import org.apache.http.util.EntityUtils;</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">import com.zhihe.xqsh.network.ServerErrorException;</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">import android.accounts.NetworkErrorException;</span></div><div><span style="font-size: 12px;">import android.annotation.SuppressLint;</span></div><div><span style="font-size: 12px;">import android.util.Log;</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">public class CustomerHttpClient {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>private static final String TAG = CustomerHttpClient.class.getSimpleName();</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>private static DefaultHttpClient customerHttpClient;</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>private CustomerHttpClient() {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>}</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>public static synchronized HttpClient getHttpClient() {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>if (null == customerHttpClient) {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>HttpParams params = new BasicHttpParams();</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>// 设置�?��基本参数</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>HttpProtocolParams.setContentCharset(params, "UTF-8");</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>HttpProtocolParams.setUseExpectContinue(params, true);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>HttpProtocolParams.setUserAgent(params, "Mozilla/5.0(Linux;U;Android 2.2.1;en-us;Nexus One Build.FRG83) "</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">					</span>+ "AppleWebKit/553.1(KHTML,like Gecko) Version/4.0 Mobile Safari/533.1");</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>// 超时设置</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>/* 从连接池中取连接的超时时�?*/</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>ConnManagerParams.setTimeout(params, 2000);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>ConnManagerParams.setMaxTotalConnections(params, 800);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>/* 连接超时 */</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>HttpConnectionParams.setConnectionTimeout(params, 5000);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>/* 请求超时 */</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>HttpConnectionParams.setSoTimeout(params, 10000);</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>// 设置我们的HttpClient支持HTTP和HTTPS两种模式</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>SchemeRegistry schReg = new SchemeRegistry();</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>schReg.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>schReg.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>// 使用线程安全的连接管理来创建HttpClient</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>ClientConnectionManager conMgr = new ThreadSafeClientConnManager(params, schReg);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>// �?��连接数：ConnManagerParams.setMaxTotalConnections(params, 50);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>customerHttpClient = new DefaultHttpClient(conMgr, params);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>}</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>return customerHttpClient;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>}</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>/**</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * 以get方式提交数据</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> *&nbsp;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @param url 提交地址</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @param params 参数</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @return 响应结果</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @throws ServerErrorException 请求失败</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @throws NetworkErrorException 连接失败</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> */</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>public static String get(String url, String params) throws ServerErrorException, NetworkErrorException {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>int tryTimes = 0;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>NullPointerException ex;</span></div><div><span style="white-space: pre; font-size: 12px;">		</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>do {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>try {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">				</span>return tryGet(url, params);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>} catch (NullPointerException e) {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">				</span>ex = e;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">				</span>tryTimes++;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>}</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>} while (tryTimes &lt; 3);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>throw ex;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>}</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>/**</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * 以get方式提交数据</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> *&nbsp;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @param url 提交地址</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @param params 参数</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @return 响应结果</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @throws ServerErrorException 请求失败</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @throws NetworkErrorException 连接失败</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> */</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>public static String tryGet(String url, String params) throws ServerErrorException, NetworkErrorException {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>try {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>HttpGet request = new HttpGet(url + params);</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>/*if (LotteryApplication.isCmwap()) {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">				</span>org.apache.http.HttpHost proxy = new org.apache.http.HttpHost("10.0.0.172", 80, "http");</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">				</span>HttpParams httpParams = new BasicHttpParams();</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">				</span>ConnRouteParams.setDefaultProxy(httpParams, proxy);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">				</span>request.setParams(httpParams);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>}*/</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>HttpClient client = getHttpClient();</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>HttpResponse response = client.execute(request);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">				</span>throw new ServerErrorException("��������&#230;�����Ժ�����");</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>}</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>HttpEntity resEntity = response.getEntity();</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>String result = (resEntity == null) ? null : EntityUtils.toString(resEntity, "UTF-8");</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>return result;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>} catch (UnsupportedEncodingException e) {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>logw(e.getMessage());</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>return null;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>} catch (ClientProtocolException e) {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>logw(e.getMessage());</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>return null;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>} catch (IOException e) {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>throw new NetworkErrorException("���Ӳ��ɹ���������������", e);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>}</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>}</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>private static void logw(String string) {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>if (string != null) {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>Log.w(TAG, string);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>}</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>}</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>/**</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * 以post方式提交数据</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> *&nbsp;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @param url 提交地址</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @param params 参数</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @return 响应结果</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @throws ServerErrorException 请求失败</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @throws NetworkErrorException 连接失败</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> */</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>public static String post(String url, List&lt;NameValuePair&gt; params) throws ServerErrorException, NetworkErrorException {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>return post(url, params, null);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>}</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>/**</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * 以post方式提交数据</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> *&nbsp;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @param url 提交地址</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @param params 参数</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @param soTimeout 响应超时时间，单位毫�?</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @return 响应结果</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @throws ServerErrorException 请求失败</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @throws NetworkErrorException 连接失败</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> */</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>public static String post(String url, List&lt;NameValuePair&gt; params, int soTimeout) throws ServerErrorException,</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>NetworkErrorException {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>HttpParams httpParams;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>if (soTimeout &lt;= 0) {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>httpParams = null;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>} else {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>httpParams = new BasicHttpParams();</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>HttpConnectionParams.setSoTimeout(httpParams, soTimeout);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>}</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>return post(url, params, httpParams);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>}</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>/**</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * 以post方式提交数据</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> *&nbsp;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @param url 提交地址</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @param params 参数</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @param httpParams http参数</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @return 响应结果</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @throws ServerErrorException 请求失败</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @throws NetworkErrorException 连接失败</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> */</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>public static String post(String url, List&lt;NameValuePair&gt; params, HttpParams httpParams) throws ServerErrorException,</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>NetworkErrorException {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>int tryTimes = 0;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>NullPointerException ex;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>do {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>try {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">				</span>return tryPost(url, params, httpParams);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>} catch (NullPointerException e) {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">				</span>ex = e;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">				</span>tryTimes++;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>}</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>} while (tryTimes &lt; 3);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>throw ex;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>}</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>/**</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * 以post方式提交数据</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> *&nbsp;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @param url 提交地址</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @param params 参数</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @param httpParams http参数</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @return 响应结果</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @throws ServerErrorException 请求失败</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @throws NetworkErrorException 连接失败</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> */</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>public static String tryPost(String url, List&lt;NameValuePair&gt; params, HttpParams httpParams) throws ServerErrorException,</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>NetworkErrorException {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>try {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>HttpPost request = new HttpPost(url);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>if (params != null &amp;&amp; params.size() &gt; 0) {<span style="white-space:pre">				</span></span></div><div><span style="font-size: 12px;"><span style="white-space:pre">				</span>request.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>}</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">//<span style="white-space:pre">			</span>if (LotteryApplication.isCmwap()) {</span></div><div><span style="font-size: 12px;">//<span style="white-space:pre">				</span>org.apache.http.HttpHost proxy = new org.apache.http.HttpHost("10.0.0.172", 80, "http");</span></div><div><span style="font-size: 12px;">//<span style="white-space:pre">				</span>if (httpParams == null)</span></div><div><span style="font-size: 12px;">//<span style="white-space:pre">					</span>httpParams = new BasicHttpParams();</span></div><div><span style="font-size: 12px;">//<span style="white-space:pre">				</span>ConnRouteParams.setDefaultProxy(httpParams, proxy);</span></div><div><span style="font-size: 12px;">//<span style="white-space:pre">			</span>}</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>if (httpParams != null)</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">				</span>request.setParams(httpParams);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>//Log.v("CS", params.toString());</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>HttpClient client = getHttpClient();</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>HttpResponse response = client.execute(request);</span></div><div><span style="white-space: pre; font-size: 12px;">			</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">				</span>//Log.v("CS", params.toString());</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">				</span>//Log.v("CS", response.getStatusLine().getStatusCode() + "");</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">				</span>request.abort();&nbsp;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">				</span>throw new ServerErrorException("��������&#230;�����Ժ�����");</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>}</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>if (response.getStatusLine ().getStatusCode () != 200) { &nbsp;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">				</span>request.abort(); &nbsp;//�ж�����,���������Կ�ʼ��һ������</span></div><div><span style="font-size: 12px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return null; &nbsp;</span></div><div><span style="font-size: 12px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>HttpEntity resEntity = response.getEntity();</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>String result = (resEntity == null) ? null : EntityUtils.toString(resEntity, "UTF-8");</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>//Log.v("CS", params.toString() + "||||" + result);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>return result;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>} catch (UnsupportedEncodingException e) {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>logw(e.getMessage());</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>return null;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>} catch (ClientProtocolException e) {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>logw(e.getMessage());</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>return null;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>} catch (IOException e) {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>throw new NetworkErrorException(e.getMessage(), e);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>//throw new NetworkErrorException("连接不成功，请检查网络设�?, e);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>}</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>}</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>@SuppressLint("SdCardPath")</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>public static String download(String url) throws ServerErrorException, NetworkErrorException {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>try {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>//Log.i("http-download", url);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>HttpPost request = new HttpPost(url);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>HttpClient client = getHttpClient();</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>HttpResponse response = client.execute(request);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">				</span>throw new ServerErrorException("��������&#230;�����Ժ�����");</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>}</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>HttpEntity entity = response.getEntity();</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>InputStream is = entity.getContent();</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>if (is == null)</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">				</span>throw new ServerErrorException("stream is null ");</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>String fileExt = url.substring(url.lastIndexOf(".") + 1, url.length()).toLowerCase();</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>String fileName = url.substring(url.lastIndexOf("/") + 1, url.lastIndexOf("."));</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>File tempFile = new File("/sdcard/" + fileName + "." + fileExt);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>if (!tempFile.exists())</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">				</span>tempFile.createNewFile();</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>FileOutputStream fileOutputStream = new FileOutputStream(tempFile);</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>byte[] buf = new byte[1024];</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>int ch;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>while ((ch = is.read(buf)) != -1) {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">				</span>fileOutputStream.write(buf, 0, ch);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>}</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>fileOutputStream.flush();</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>fileOutputStream.close();</span></div><div><span style="white-space: pre; font-size: 12px;">			</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>return tempFile.getAbsolutePath();</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>} catch (UnsupportedEncodingException e) {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>logw(e.getMessage());</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>return null;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>} catch (ClientProtocolException e) {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>logw(e.getMessage());</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>return null;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>} catch (IOException e) {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>throw new NetworkErrorException(e.getMessage(), e);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>}</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>}</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>/**</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * 清空cookie</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> */</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>public static void clearCookie() {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>if (customerHttpClient != null)</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>customerHttpClient.getCookieStore().clear();</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>}</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>/**</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * 清除指定cookie</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> *&nbsp;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> * @param name cookie名称</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> */</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>public static void clearCookie(String name) {</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>if (customerHttpClient == null)</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">			</span>return;</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>BasicClientCookie expiredCookie = new BasicClientCookie(name, "null");</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>expiredCookie.setExpiryDate(new Date(System.currentTimeMillis() - 1000));</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">		</span>customerHttpClient.getCookieStore().addCookie(expiredCookie);</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>}</span></div><div><span style="font-size: 12px;">}</span></div><div style="font-family: Tahoma; font-size: 11px;"></div><img src ="http://www.blogjava.net/ZouYonghui/aggbug/426208.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ZouYonghui/" target="_blank">Terry Zou</a> 2015-07-13 22:10 <a href="http://www.blogjava.net/ZouYonghui/archive/2015/07/13/426208.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ffg</title><link>http://www.blogjava.net/ZouYonghui/archive/2015/07/13/426185.html</link><dc:creator>Terry Zou</dc:creator><author>Terry Zou</author><pubDate>Mon, 13 Jul 2015 03:04:00 GMT</pubDate><guid>http://www.blogjava.net/ZouYonghui/archive/2015/07/13/426185.html</guid><wfw:comment>http://www.blogjava.net/ZouYonghui/comments/426185.html</wfw:comment><comments>http://www.blogjava.net/ZouYonghui/archive/2015/07/13/426185.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ZouYonghui/comments/commentRss/426185.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ZouYonghui/services/trackbacks/426185.html</trackback:ping><description><![CDATA[ http://yunpan.cn/ccdbTgQaYa4U7<img src ="http://www.blogjava.net/ZouYonghui/aggbug/426185.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ZouYonghui/" target="_blank">Terry Zou</a> 2015-07-13 11:04 <a href="http://www.blogjava.net/ZouYonghui/archive/2015/07/13/426185.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>abe</title><link>http://www.blogjava.net/ZouYonghui/archive/2015/07/09/426109.html</link><dc:creator>Terry Zou</dc:creator><author>Terry Zou</author><pubDate>Wed, 08 Jul 2015 16:04:00 GMT</pubDate><guid>http://www.blogjava.net/ZouYonghui/archive/2015/07/09/426109.html</guid><wfw:comment>http://www.blogjava.net/ZouYonghui/comments/426109.html</wfw:comment><comments>http://www.blogjava.net/ZouYonghui/archive/2015/07/09/426109.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ZouYonghui/comments/commentRss/426109.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ZouYonghui/services/trackbacks/426109.html</trackback:ping><description><![CDATA[<div><div>private Drawable img_time_filter,img_time_filter_selected&nbsp;;<br /><div>//过滤器TextView中显示的图片</div><div>img_time_filter = getResources().getDrawable(R.drawable.time_filter);</div><div><span style="white-space:pre">		</span>//调用setCompoundDrawables时，必须调用Drawable.setBounds()方法,否则图片不显示</div><div><span style="white-space:pre">		</span>img_time_filter.setBounds(0, 0, img_time_filter.getMinimumWidth(), img_time_filter.getMinimumHeight());<br /><div>img_time_filter_selected = getResources().getDrawable(R.drawable.time_filter_selected);</div><div><span style="white-space:pre">		</span>img_time_filter_selected.setBounds(0, 0, img_time_filter_selected.getMinimumWidth(), img_time_filter_selected.getMinimumHeight());</div></div></div>tv_filterTime.setCompoundDrawables(img_time_filter_selected, null, null, null);<span style="white-space:pre">	</span></div><div><span style="white-space:pre">		</span>tv_filterTime.setTextColor(getResources().getColor(R.color.white));</div><div><span style="white-space:pre">		</span>rl_filterTime.setBackgroundColor(getResources().getColor(R.color.red));<br /><br /><div>tv_filterTime.setCompoundDrawables(img_time_filter, null, null, null);</div><div><span style="white-space:pre">		</span>rl_filterTime.setBackgroundColor(getResources().getColor(R.color.white));&nbsp;</div><div><span style="white-space:pre">		</span>lv_filterTime.setVisibility(View.INVISIBLE);</div></div><img src ="http://www.blogjava.net/ZouYonghui/aggbug/426109.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ZouYonghui/" target="_blank">Terry Zou</a> 2015-07-09 00:04 <a href="http://www.blogjava.net/ZouYonghui/archive/2015/07/09/426109.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android之Activity的四种启动模式</title><link>http://www.blogjava.net/ZouYonghui/archive/2015/06/24/425872.html</link><dc:creator>Terry Zou</dc:creator><author>Terry Zou</author><pubDate>Wed, 24 Jun 2015 10:10:00 GMT</pubDate><guid>http://www.blogjava.net/ZouYonghui/archive/2015/06/24/425872.html</guid><wfw:comment>http://www.blogjava.net/ZouYonghui/comments/425872.html</wfw:comment><comments>http://www.blogjava.net/ZouYonghui/archive/2015/06/24/425872.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ZouYonghui/comments/commentRss/425872.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ZouYonghui/services/trackbacks/425872.html</trackback:ping><description><![CDATA[<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 10px auto 10px 30px; font: 13px/19px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; letter-spacing: normal; color: rgb(75,75,75); word-spacing: 0px; -webkit-text-stroke-width: 0px" class="p0"><span style="line-height: 1.5">转载：<a href="http://www.cnblogs.com/allenzheng/archive/2013/04/28/3050065.html">http://www.cnblogs.com/allenzheng/archive/2013/04/28/3050065.html</a><br />当应用运行起来后就会开启一条线程，线程中会运行一个任务栈，当<span style="line-height: 1.5; font-family: 'Times New Roman'">Activity</span><span style="line-height: 1.5; font-family: 宋体">实例创建后就会放入任务栈中。</span><span style="line-height: 1.5; font-family: 'Times New Roman'">Activity启动</span><span style="line-height: 1.5; font-family: 宋体">模式的设置在</span></span><span style="line-height: 1.5">AndroidManifest.</span><span style="line-height: 1.5">xml</span><span style="line-height: 1.5">文件中，通过配置</span><span style="line-height: 1.5">Activity<span style="line-height: 1.5; font-family: 宋体">的属性</span></span><span style="line-height: 1.5">android:launchMode</span><span style="line-height: 1.5">=</span><span style="line-height: 1.5">""</span><span style="line-height: 1.5">设置</span><span style="line-height: 1.5">。</span></p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 10px auto 10px 30px; font: 13px/19px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; letter-spacing: normal; color: rgb(75,75,75); word-spacing: 0px; -webkit-text-stroke-width: 0px" class="p0"><span style="line-height: 1.5">&nbsp;</span></p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 10px auto 10px 30px; font: 13px/19px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; letter-spacing: normal; color: rgb(75,75,75); word-spacing: 0px; -webkit-text-stroke-width: 0px" class="p0"><strong><span style="line-height: 1.5">1.&nbsp;</span><span style="line-height: 1.5">Standared<span style="line-height: 1.5; font-family: 宋体">模式（默认）</span></span></strong></p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 10px auto 10px 30px; font: 13px/19px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; letter-spacing: normal; color: rgb(75,75,75); word-spacing: 0px; -webkit-text-stroke-width: 0px" class="p0"><span style="line-height: 1.5">我们平时直接创建的<span style="line-height: 1.5; font-family: 'Times New Roman'">Activity</span><span style="line-height: 1.5; font-family: 宋体">都是这种模式的</span><span style="line-height: 1.5; font-family: 'Times New Roman'">Activity</span><span style="line-height: 1.5; font-family: 宋体">，这种模式的</span><span style="line-height: 1.5; font-family: 'Times New Roman'">Activity</span><span style="line-height: 1.5; font-family: 宋体">的特点是：只要你创建了</span><span style="line-height: 1.5; font-family: 'Times New Roman'">Activity</span><span style="line-height: 1.5; font-family: 宋体">实例，一旦激活该</span><span style="line-height: 1.5; font-family: 'Times New Roman'">Activity</span><span style="line-height: 1.5; font-family: 宋体">，则会向任务栈中加入新创建的实例，退出</span><span style="line-height: 1.5; font-family: 'Times New Roman'">Activity</span><span style="line-height: 1.5; font-family: 宋体">则会在任务栈中销毁该实例。</span></span></p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 10px auto; font: 13px/19px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; letter-spacing: normal; color: rgb(75,75,75); word-spacing: 0px; -webkit-text-stroke-width: 0px" class="p0">&nbsp;</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 10px auto 10px 30px; font: 13px/19px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; letter-spacing: normal; color: rgb(75,75,75); word-spacing: 0px; -webkit-text-stroke-width: 0px" class="p0"><strong><span style="line-height: 1.5">2.&nbsp;</span><span style="line-height: 1.5">SingleTop<span style="line-height: 1.5; font-family: 宋体">模式</span></span></strong></p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 10px auto 10px 30px; font: 13px/19px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; letter-spacing: normal; color: rgb(75,75,75); word-spacing: 0px; -webkit-text-stroke-width: 0px" class="p0"><span style="line-height: 1.5">这种模式会考虑当前要激活的<span style="line-height: 1.5; font-family: 'Times New Roman'">Activity</span><span style="line-height: 1.5; font-family: 宋体">实例在任务栈中是否正处于栈顶，如果处于栈顶则无需重新创建新的实例，会重用已存在的实例，否则会在任务栈中创建新的实例。</span></span></p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 10px auto 10px 30px; font: 13px/19px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; letter-spacing: normal; color: rgb(75,75,75); word-spacing: 0px; -webkit-text-stroke-width: 0px" class="p0"><span style="line-height: 1.5">&nbsp;</span></p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 10px auto 10px 30px; font: 13px/19px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; letter-spacing: normal; color: rgb(75,75,75); word-spacing: 0px; -webkit-text-stroke-width: 0px" class="p0"><strong><span style="line-height: 1.5">3.&nbsp;</span><span style="line-height: 1.5">SingleTask<span style="line-height: 1.5; font-family: 宋体">模式</span></span></strong></p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 10px auto 10px 30px; font: 13px/19px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; letter-spacing: normal; color: rgb(75,75,75); word-spacing: 0px; -webkit-text-stroke-width: 0px" class="p0"><span style="line-height: 1.5">如果任务栈中存在该模式的<span style="line-height: 1.5; font-family: 'Times New Roman'">Activity</span><span style="line-height: 1.5; font-family: 宋体">实例，则把栈中该实例以上的</span><span style="line-height: 1.5; font-family: 'Times New Roman'">Activity</span><span style="line-height: 1.5; font-family: 宋体">实例全部移除，调用该实例的</span><span style="line-height: 1.5; font-family: 'Times New Roman'">newInstance()</span><span style="line-height: 1.5; font-family: 宋体">方法重用该</span><span style="line-height: 1.5; font-family: 'Times New Roman'">Activity</span><span style="line-height: 1.5; font-family: 宋体">，使该实例处於栈顶位置，否则就重新创建一个新的</span><span style="line-height: 1.5; font-family: 'Times New Roman'">Activity</span><span style="line-height: 1.5; font-family: 宋体">实例。</span></span></p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 10px auto; font: 13px/19px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; letter-spacing: normal; color: rgb(75,75,75); word-spacing: 0px; -webkit-text-stroke-width: 0px" class="p0">&nbsp;</p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 10px auto 10px 30px; font: 13px/19px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; letter-spacing: normal; color: rgb(75,75,75); word-spacing: 0px; -webkit-text-stroke-width: 0px" class="p0"><strong><span style="line-height: 1.5">4.&nbsp;</span><span style="line-height: 1.5">SingleInstance<span style="line-height: 1.5; font-family: 宋体">模式</span></span></strong></p>
<p style="text-align: left; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 10px auto 10px 30px; font: 13px/19px Verdana, Geneva, Arial, Helvetica, sans-serif; white-space: normal; letter-spacing: normal; color: rgb(75,75,75); word-spacing: 0px; -webkit-text-stroke-width: 0px" class="p0"><span style="line-height: 1.5">当该模式<span style="line-height: 1.5; font-family: 'Times New Roman'">Activity</span><span style="line-height: 1.5; font-family: 宋体">实例在任务栈中创建后，只要该实例还在任务栈中，即只要激活的是该类型的</span><span style="line-height: 1.5; font-family: 'Times New Roman'">Activity</span><span style="line-height: 1.5; font-family: 宋体">，都会通过调用实例的</span><span style="line-height: 1.5; font-family: 'Times New Roman'">newInstance()</span><span style="line-height: 1.5; font-family: 宋体">方法重用该</span><span style="line-height: 1.5; font-family: 'Times New Roman'">Activity</span><span style="line-height: 1.5; font-family: 宋体">，此时使用的都是同一个</span><span style="line-height: 1.5; font-family: 'Times New Roman'">Activity实例</span><span style="line-height: 1.5; font-family: 宋体">，它都会处于任务栈的栈顶。此模式一般用于加载较慢的，比较耗性能且不需要每次都重新创建的</span><span style="line-height: 1.5; font-family: 'Times New Roman'">Activity</span><span style="line-height: 1.5; font-family: 宋体">。</span></span></p><img src ="http://www.blogjava.net/ZouYonghui/aggbug/425872.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ZouYonghui/" target="_blank">Terry Zou</a> 2015-06-24 18:10 <a href="http://www.blogjava.net/ZouYonghui/archive/2015/06/24/425872.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>android中跨进程通讯的4种方式</title><link>http://www.blogjava.net/ZouYonghui/archive/2015/06/24/425871.html</link><dc:creator>Terry Zou</dc:creator><author>Terry Zou</author><pubDate>Wed, 24 Jun 2015 09:28:00 GMT</pubDate><guid>http://www.blogjava.net/ZouYonghui/archive/2015/06/24/425871.html</guid><wfw:comment>http://www.blogjava.net/ZouYonghui/comments/425871.html</wfw:comment><comments>http://www.blogjava.net/ZouYonghui/archive/2015/06/24/425871.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ZouYonghui/comments/commentRss/425871.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ZouYonghui/services/trackbacks/425871.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: android中跨进程通讯的4种方式转自：http://www.cnblogs.com/sevenyuan/archive/2013/03/22/2975122.html由于android系统中应用程序之间不能共享内存。因此，在不同应用程序之间交互数据（跨进程通讯）就稍微麻烦一些。在android SDK中提供了4种用于跨进程通讯的方式。这4种方式正好对应于android系统中4种应用...&nbsp;&nbsp;<a href='http://www.blogjava.net/ZouYonghui/archive/2015/06/24/425871.html'>阅读全文</a><img src ="http://www.blogjava.net/ZouYonghui/aggbug/425871.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ZouYonghui/" target="_blank">Terry Zou</a> 2015-06-24 17:28 <a href="http://www.blogjava.net/ZouYonghui/archive/2015/06/24/425871.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android 一个应用中只有一个进程么？还是可以有多个</title><link>http://www.blogjava.net/ZouYonghui/archive/2015/06/24/425869.html</link><dc:creator>Terry Zou</dc:creator><author>Terry Zou</author><pubDate>Wed, 24 Jun 2015 09:12:00 GMT</pubDate><guid>http://www.blogjava.net/ZouYonghui/archive/2015/06/24/425869.html</guid><wfw:comment>http://www.blogjava.net/ZouYonghui/comments/425869.html</wfw:comment><comments>http://www.blogjava.net/ZouYonghui/archive/2015/06/24/425869.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ZouYonghui/comments/commentRss/425869.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ZouYonghui/services/trackbacks/425869.html</trackback:ping><description><![CDATA[<p style="text-align: left; padding-bottom: 0px; text-transform: none; background-color: rgb(241,248,240); text-indent: 0px; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; font: 14px 'Microsoft YaHei', Verdana, sans-serif, SimSun; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px">Android 手机上的应用一般情况下都在一个进程中运行。</p>
<p style="text-align: left; padding-bottom: 0px; text-transform: none; background-color: rgb(241,248,240); text-indent: 0px; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; font: 14px 'Microsoft YaHei', Verdana, sans-serif, SimSun; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px">但是，也可以指定Activity或者Service在Remote 进程中执行。多数情况下，只有在用户认为应用退出后还需要继续后台长期运行的应用，才需要这样做。此时，该应用有两个进程。</p>
<p style="text-align: left; padding-bottom: 0px; text-transform: none; background-color: rgb(241,248,240); text-indent: 0px; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; font: 14px 'Microsoft YaHei', Verdana, sans-serif, SimSun; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px">还有一种hack的方式，在apk中通过调用命令行来启动另外的进程。此种方式用户不可见，也不安全。不提倡。</p><img src ="http://www.blogjava.net/ZouYonghui/aggbug/425869.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ZouYonghui/" target="_blank">Terry Zou</a> 2015-06-24 17:12 <a href="http://www.blogjava.net/ZouYonghui/archive/2015/06/24/425869.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>