<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="http://feeds.qzone.qq.com/rss.xsl" version="1.0"?>
<rss version="2.0" xmlns:qz="http://qzone.qq.com">
<channel>
<title><![CDATA[椰子林]]></title>
<description><![CDATA[我在汉堡上滑雪]]></description>
<link>http://287868587.qzone.qq.com</link>
<lastBuildDate>Mon, 30 Nov 2009 01:08:29 GMT</lastBuildDate>
<generator>Qzone</generator>
<language>zh-cn</language>
<copyright>Copyright (C), 2005-2008, Tencent Tech. Co., Ltd.</copyright>
<pubDate>Sun, 13 Sep 2009 04:31:44 GMT</pubDate>

<item>
<title><![CDATA[远程访问jboss上的EJB3组件]]></title>
<link>http://287868587.qzone.qq.com/blog/1252816304</link>
<description><![CDATA[为了能让远程客户端访问JBOSS上的EJB3组件,<br>JBOSS容器在启动的时候必须加上参数: --host=实际的IP地址<br><br>如:run --host=192.168.1.108<br><br>在MyEclipse中,进入服务器配置,将--host=192.168.1.108赋值给Optional program arguments为--host=192.168.1.108.<br>客户端代码不变,还是下面的.<br><br>package com.aptech.test;<br><br>import java.util.Properties;<br><br>import javax.naming.Context;<br>import javax.naming.InitialContext;<br>import javax.naming.NamingException;<br><br>import com.aptech.ejb.HelloWorld;<br><br>public class Client {<br>    public static void main(String[] args) {<br>        Properties p = new Properties();<br>        p.put(&quot;java.naming.factory.initial&quot;, &quot;org.jnp.interfaces.NamingContextFactory&quot;);<br>        p.put(&quot;java.naming.provider.url&quot;, &quot;localhost:1099&quot;); //此处也不必改,改了没用<br>        p.put(&quot;java.naming.factory.url.pkgs&quot;, &quot;org.jboss.naming&quot;);<br>        <br>        try {<br>            Context ctx = new InitialContext(p);<br>            HelloWorld hw = (HelloWorld) ctx.lookup(&quot;qh01/hello&quot;);<br>            System.out.println(hw.helloWorld(&quot;中国&quot;));<br>            hw.displayEmployee();<br>            <br>        } catch (NamingException e) {<br>            // TODO Auto-generated catch block<br>            e.printStackTrace();<br>        }<br>    }<br>} <!--v:3.2--> ]]></description>
<category><![CDATA[个人日记]]></category>
<author><![CDATA[287868587@qq.com(椰子林)]]></author>
<comments>http://287868587.qzone.qq.com/blog/1252816304#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Sun, 13 Sep 2009 04:31:44 GMT</pubDate>
<guid>http://287868587.qzone.qq.com/blog/1252816304</guid>
</item>

<item>
<title><![CDATA[将EXE程序默认图标替换掉]]></title>
<link>http://287868587.qzone.qq.com/blog/1252338523</link>
<description><![CDATA[将EXE程序默认图标替换掉<br>新建一个ICON,ID设置为&quot;IDC_MAINFRAME&quot;即可,注意,双引号也必须加上. <!--v:3.2--> ]]></description>
<category><![CDATA[个人日记]]></category>
<author><![CDATA[287868587@qq.com(椰子林)]]></author>
<comments>http://287868587.qzone.qq.com/blog/1252338523#comment</comments>
<qz:effect>134217728</qz:effect>
<pubDate>Mon, 07 Sep 2009 15:48:43 GMT</pubDate>
<guid>http://287868587.qzone.qq.com/blog/1252338523</guid>
</item>

<item>
<title><![CDATA[关于进制的趣事]]></title>
<link>http://287868587.qzone.qq.com/blog/1251707991</link>
<description><![CDATA[1.z=(y &lt;&lt; 8 | x)的动机?<br>可以使用x = z &amp; 0xFF(可以将前面部分全部置0)； y = z &gt;&gt; 8；取回x,y的值.<br><br>2.为什么在定义宏的时候喜欢用十六进制的值,且分别为0x0001,0x0002,0x0004,0x0008,0x0010等?<br>因为这些值都有一个共同的特点,转换成二进制后,都是以1开头,后面都是0,和自己本身作&amp;操作后,结果为1,和其他任何值作&amp;操作都是0.<br><br>3.x = (x + DIVISIONS) % DIVISIONS的作用?<br>可以让x的值循环变化,循环范围取决于DIVISIONS常量,如果DIVISIONS=5,则x将在0-4之间变化.<br><br>4.使用二进制实现标志叠加<br>每一个标志都使用一个以1开头,后面全部接0的二进制表示,长度不限,如:<br>int x = 0x8		-&gt;		1000<br>int y = 0x10		-&gt;		10000<br>int z = 0x20		-&gt;		100000<br><br>叠加的结果是:int a = x | y | z.    -&gt;  111000<br>判断是否有x标志:<br>if((a &amp; x) == x)		-&gt;  如果返回值为真,表示确实包含了x标记.<br>代码:<br>	int x1 = 0x8;<br>	int y1 = 0x10;<br>	int z1 = 0x20;<br><br>	int rrr = x1 | z1;<br>	if((rrr &amp; x1) == x1)<br>	{<br>		printf(&quot;有x标记\n&quot;);<br>	}<br>	if((rrr &amp; y1) == y1)<br>	{<br>		printf(&quot;有y标记\n&quot;);<br>	}<br>	if((rrr &amp; z1) == z1)<br>	{<br>		printf(&quot;有z标记\n&quot;);<br>	}<br><br> <!--v:3.2--> ]]></description>
<category><![CDATA[技术文章]]></category>
<author><![CDATA[287868587@qq.com(椰子林)]]></author>
<comments>http://287868587.qzone.qq.com/blog/1251707991#comment</comments>
<qz:effect>134217728</qz:effect>
<pubDate>Mon, 31 Aug 2009 08:39:51 GMT</pubDate>
<guid>http://287868587.qzone.qq.com/blog/1251707991</guid>
</item>

<item>
<title><![CDATA[通过位运算存储数据,记一下.]]></title>
<link>http://287868587.qzone.qq.com/blog/1251369415</link>
<description><![CDATA[#include &lt;stdio.h&gt;<br>#include &lt;windows.h&gt;<br><br>UINT NUMBER_INT(UINT64 e, int number)<br>{<br>    int a, b, c, d;<br>    d = e % (2 &lt;&lt; 15);<br>    e = e / (2 &lt;&lt; 15);<br>    c = e % (2 &lt;&lt; 15);<br>    e = e / (2 &lt;&lt; 15);<br>    b = e % (2 &lt;&lt; 15);<br>    e = e / (2 &lt;&lt; 15);<br>    a = e % (2 &lt;&lt; 15);<br><br>    if(number == 1) return a;<br>    else if(number == 2) return b;<br>    else if(number == 3) return c;<br>    else if(number == 4) return d;<br>    else return -1;<br>}<br><br><br>int main()<br>{<br><br>    UINT a = 40001;<br>    UINT b = 40002;<br>    UINT c = 40003;<br>    UINT d = 40004;<br>    <br>    <br>    UINT64 e = (a &lt;&lt; 16) + b;<br>    e = (e &lt;&lt; 16) + c;<br>    e = (e &lt;&lt; 16) + d;<br><br>    printf(&quot;%lX\n&quot;, HIWORD(e));<br>    printf(&quot;%lX\n&quot;, LOWORD(e));<br>    printf(&quot;%d\n&quot;, 2 &lt;&lt; 15);<br><br>    printf(&quot;%d\t%d\t%d\t%d\t&quot;, NUMBER_INT(e, 1), NUMBER_INT(e, 2), NUMBER_INT(e, 3), NUMBER_INT(e, 4));<br>    int bb;<br>    scanf(&quot;%d&quot;, &amp;bb);<br>    return 0;<br>} <!--v:3.2--> ]]></description>
<category><![CDATA[个人日记]]></category>
<author><![CDATA[287868587@qq.com(椰子林)]]></author>
<comments>http://287868587.qzone.qq.com/blog/1251369415#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Thu, 27 Aug 2009 10:36:55 GMT</pubDate>
<guid>http://287868587.qzone.qq.com/blog/1251369415</guid>
</item>

<item>
<title><![CDATA[JQuery--Event属性说明]]></title>
<link>http://287868587.qzone.qq.com/blog/1250223855</link>
<description><![CDATA[JQuery读书笔记--Event属性说明 <br> <br>JQuery事件中的Event属性是经常性的被忽略的。大多数时间你的确不怎么用它，但有些时候它还是它还是有作用的。如获知触发时用户的环境（是否按了shift etc）。每个浏览器对event都有不同的地方，Jquery对Event做了标准化所以可以放心用。 <br> <br>    * 。target   这个反应触发事件的DOM对象，可以在事件冒泡的时候判断是否是事件源头(compare event.target to this) <br>    * .pageX:  鼠标的left属性，相对于page <br>    * .pageY:  鼠标的top属性，相对于page <br>    * preventDefault():  这个方法被调用，则原有事件就被忽略。（例如 clicked link就不会去新的Url了） <br>    * stopPropagation():让Jquery停止事件冒泡 <br>    * .data:  如果事件中还有EventData你就可以用这个属性获得对应Eventdata数据了。 <br> <br>    * ctrlKey: 类型: Boolean, 说明: Ctrl 键是否按下 <br>    * shiftKey: 类型: Boolean, 说明: Shift键是否按下 <br>    * altKey: 类型: Boolean, 说明: Alt 键是否按下 <br>    * charCode: 类型: Number, 说明: 最后响应键盘按键的 charCode 值 <br>    * keyCode: 类型: Number, 说明: 最后响应键盘按键的 keyCode 值 <br>    * button: 类型: Number, 说明: 按下的鼠标键, 左键:1, 右键:2, 中键:4 <br>    * which: 类型: Number, 说明: 最后响应的是哪个按键, 如果是键盘按键则等于 charCode || keyCode; 如果是鼠标按键, 左键:1, 右键:3, 中键2 <br> <br> <br>type : 事件类型 <br>relatedTarget:对于鼠标事件, 标示触发事件时离开或者进入的DOM元素 <br>currentTarget:冒泡前的当前触发事件的DOM对象, 等同于this. <br>result: 上一个事件处理函数返回的值 <br>screenX/Y:对于鼠标事件, 获取事件相对于屏幕原点的水平/垂直坐标 <br> <!--v:3.2--> ]]></description>
<category><![CDATA[技术文章]]></category>
<author><![CDATA[287868587@qq.com(椰子林)]]></author>
<comments>http://287868587.qzone.qq.com/blog/1250223855#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Fri, 14 Aug 2009 04:24:15 GMT</pubDate>
<guid>http://287868587.qzone.qq.com/blog/1250223855</guid>
</item>

<item>
<title><![CDATA[jquery的event对象属性和方法总结]]></title>
<link>http://287868587.qzone.qq.com/blog/1250047470</link>
<description><![CDATA[JQuery读书笔记--Event属性说明 <br> <br>JQuery事件中的Event属性是经常性的被忽略的。大多数时间你的确不怎么用它，但有些时候它还是它还是有作用的。如获知触发 <br> <br>时用户的环境（是否按了shift etc）。每个浏览器对event都有不同的地方，Jquery对Event做了标准化所以可以放心用。 <br> <br>    * 。target   这个反应触发事件的DOM对象，可以在事件冒泡的时候判断是否是事件源头(compare event.target to  <br> <br>this) <br>    * .pageX:  鼠标的left属性，相对于page <br>    * .pageY:  鼠标的top属性，相对于page <br>    * preventDefault():  这个方法被调用，则原有事件就被忽略。（例如 clicked link就不会去新的Url了） <br>    * stopPropagation():让Jquery停止事件冒泡 <br>    * .Data:  如果事件中还有EventData你就可以用这个属性获得对应Eventdata数据了。 <br> <br>    * ctrlKey: 类型: Boolean, 说明: Ctrl 键是否按下 <br>    * shiftKey: 类型: Boolean, 说明: Shift键是否按下 <br>    * altKey: 类型: Boolean, 说明: Alt 键是否按下 <br>    * charCode: 类型: Number, 说明: 最后响应键盘按键的 charCode 值 <br>    * keyCode: 类型: Number, 说明: 最后响应键盘按键的 keyCode 值 <br>    * button: 类型: Number, 说明: 按下的鼠标键, 左键:1, 右键:2, 中键:4 <br>    * which: 类型: Number, 说明: 最后响应的是哪个按键, 如果是键盘按键则等于 charCode || keyCode; 如果是鼠标按 <br> <br>键, 左键:1, 右键:3, 中键2 <br> <br> <br>type : 事件类型 <br>relatedTarget:对于鼠标事件, 标示触发事件时离开或者进入的DOM元素 <br>currentTarget:冒泡前的当前触发事件的DOM对象, 等同于this. <br>result: 上一个事件处理函数返回的值 <br>screenX/Y:对于鼠标事件, 获取事件相对于屏幕原点的水平/垂直坐标 <br> <!--v:3.2--> ]]></description>
<category><![CDATA[技术文章]]></category>
<author><![CDATA[287868587@qq.com(椰子林)]]></author>
<comments>http://287868587.qzone.qq.com/blog/1250047470#comment</comments>
<qz:effect>134217728</qz:effect>
<pubDate>Wed, 12 Aug 2009 03:24:30 GMT</pubDate>
<guid>http://287868587.qzone.qq.com/blog/1250047470</guid>
</item>

<item>
<title><![CDATA[最清晰最简单的jQuery插件结构,免费供应!]]></title>
<link>http://287868587.qzone.qq.com/blog/1250037743</link>
<description><![CDATA[(function($){ <br>    $.fn.extend({ <br>　　// 插件名称 <br>        dialog: function(options){ <br>            //局部变量放到此处 <br>            return this.each(function(){ <br>                //插件代码放到此处 <br>                alert(&quot;我是一个消息框&quot;); <br>            }); <br>        } <br>    }); <br>})(jQuery) <br>//调用 <br>    &lt;script type=&quot;text/javascript&quot;&gt; <br>        $(document).ready(function(){ <br>            $().dialog(); <br>        }); <br>    &lt;/script&gt; <br>示例代码1: <br>(function($){ <br>    var mydiv; <br>    $.fn.extend({ <br>        dialog: function(options){ <br>            //局部变量放到此处  <br>            var defaults = {width: 400, height: 300}; <br>            options = $.extend(defaults, options); <br>             <br>            return this.each(function(){ <br>                mydiv = $(&quot;&lt;div id='eourou39423oifdouwo323423'/&gt;&quot;); <br>                //插件代码放到此处 <br>                mydiv.css(&quot;position&quot;, &quot;absolute&quot;) <br>                    .css(&quot;left&quot;, ($(document).width() - options.width) / 2 + &quot;px&quot;) <br>                    .css(&quot;top&quot;, ($(document).height() - options.height) / 2 + &quot;px&quot;) <br>                    .css(&quot;width&quot;, options.width + &quot;px&quot;) <br>                    .css(&quot;height&quot;, options.height + &quot;px&quot;) <br>                    .css(&quot;border&quot;, &quot;1px red solid&quot;) <br>                    .appendTo($(this)); <br>            }); <br>        }, <br>         <br>        setText: function(text){ <br>            mydiv.html(text); <br>        } <br>    }); <br>})(jQuery) <br>调用: <br>    &lt;script type=&quot;text/javascript&quot;&gt; <br>        $(document).ready(function(){ <br>            $(document.body).dialog({width: 500, height: 400}).setText(&quot;中共和国&quot;); <br>        }); <br>    &lt;/script&gt; <br> <br>示例代码2(转载): <br>(function($) { <br>    $.fn.extend({ <br>        // plugin name - animatemenu <br>        animateMenu : function(options) { <br> <br>            var defaults = { <br>                animatePadding : 60, <br>                defaultPadding : 10, <br>                evenColor : '#ccc', <br>                oddColor : '#eee' <br>                , <br>            }; <br> <br>            var options = $.extend(defaults, options); <br> <br>            return this.each(function() { <br>                var o = options; <br>                var obj = $(this); <br>                var items = $(&quot;li&quot;, obj); <br> <br>                $(&quot;li:even&quot;, obj).css('background-color', o.evenColor); <br>                $(&quot;li:odd&quot;, obj).css('background-color', o.oddColor); <br> <br>                items.mouseover(function() { <br>                    $(this).animate({ <br>                        paddingLeft : o.animatePadding <br>                    }, 300); <br> <br>                }).mouseout(function() { <br>                    $(this).animate({ <br>                        paddingLeft : o.defaultPadding <br>                    }, 300); <br> <br>                }); <br>            }); <br>        } <br>    }); <br>})(jQuery); <br>调用: <br>    $(document).ready(function() {   <br>        $('#menu').animateMenu({animatePadding: 30, defaultPadding:10});   <br>    }); <!--v:3.2--> ]]></description>
<category><![CDATA[技术文章]]></category>
<author><![CDATA[287868587@qq.com(椰子林)]]></author>
<comments>http://287868587.qzone.qq.com/blog/1250037743#comment</comments>
<qz:effect>134217728</qz:effect>
<pubDate>Wed, 12 Aug 2009 00:42:23 GMT</pubDate>
<guid>http://287868587.qzone.qq.com/blog/1250037743</guid>
</item>

<item>
<title><![CDATA[Android Intent is so powerful and great.]]></title>
<link>http://287868587.qzone.qq.com/blog/1247460805</link>
<description><![CDATA[Android have lots of intent,it's powerful and useful,here is some tips for you: <br> <br>1，start web browser <br>Uri myBlogUri = Uri.parse(&quot;http://kuikui.javaeye.com&quot;); <br>returnIt = new Intent(Intent.ACTION_VIEW, myBlogUri); <br> <br> <br>2，Google map <br>Uri mapUri = Uri.parse(&quot;geo:38.899533,-77.036476&quot;); <br>returnIt = new Intent(Intent.ACTION_VIEW, mapUri); <br> <br> <br>3，show dialer tel <br>Uri telUri = Uri.parse(&quot;tel:100861&quot;); <br>returnIt = new Intent(Intent.ACTION_DIAL, telUri); <br> <br> <br>4，start call dialar <br>Uri callUri = Uri.parse(&quot;tel:100861&quot;); <br>returnIt = new Intent(Intent.ACTION_CALL, callUri); <br> <br> <br>5，uninstall apk <br>Uri uninstallUri = Uri.fromParts(&quot;package&quot;, &quot;xxx&quot;, null); <br>returnIt = new Intent(Intent.ACTION_DELETE, uninstallUri); <br> <br> <br>6，install apk <br>Uri installUri = Uri.fromParts(&quot;package&quot;, &quot;xxx&quot;, null); <br>returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri); <br> <br> <br>7，play audio <br>Uri playUri = Uri.parse(&quot;file:///sdcard/download/everything.mp3&quot;); <br>returnIt = new Intent(Intent.ACTION_VIEW, playUri); <br> <br> <br>8，show send email ui <br>Uri emailUri = Uri.parse(&quot;mailto:shenrenkui@gmail.com&quot;); <br>returnIt = new Intent(Intent.ACTION_SENDTO, emailUri); <br> <br> <br>9，send email <br>returnIt = new Intent(Intent.ACTION_SEND); <br>String[] tos = { &quot;shenrenkui@gmail.com&quot; }; <br>String[] ccs = { &quot;shenrenkui@gmail.com&quot; }; <br>returnIt.putExtra(Intent.EXTRA_EMAIL, tos); <br>returnIt.putExtra(Intent.EXTRA_CC, ccs); <br>returnIt.putExtra(Intent.EXTRA_TEXT, &quot;body&quot;); <br>returnIt.putExtra(Intent.EXTRA_SUBJECT, &quot;subject&quot;); <br>returnIt.setType(&quot;message/rfc882&quot;); <br>Intent.createChooser(returnIt, &quot;Choose Email Client&quot;); <br> <br> <br>10，send sms <br>Uri smsUri = Uri.parse(&quot;tel:100861&quot;); <br>returnIt = new Intent(Intent.ACTION_VIEW, smsUri); <br>returnIt.putExtra(&quot;sms_body&quot;, &quot;shenrenkui&quot;); <br>returnIt.setType(&quot;vnd.android-dir/mms-sms&quot;); <br> <br> <br>11，send email <br>Uri smsToUri = Uri.parse(&quot;smsto://100861&quot;); <br>returnIt = new Intent(Intent.ACTION_SENDTO, smsToUri); <br>returnIt.putExtra(&quot;sms_body&quot;, &quot;shenrenkui&quot;); <br> <br> <br>12，send mms <br>Uri mmsUri = Uri.parse(&quot;content://media/external/images/media/23&quot;); <br>returnIt = new Intent(Intent.ACTION_SEND); <br>returnIt.putExtra(&quot;sms_body&quot;, &quot;shenrenkui&quot;); <br>returnIt.putExtra(Intent.EXTRA_STREAM, mmsUri); <br>returnIt.setType(&quot;image/png&quot;);  <br> <br>if you have other intent,please share to me ,thx. <br> <br>useful resource link here: <br> <br>http://kuikui.javaeye.com/blog/318627 <br> <br>Android have lots of intent,it's powerful and useful,here is some tips for you: <br> <br>1，start web browser <br>Uri myBlogUri = Uri.parse(&quot;http://kuikui.javaeye.com&quot;); <br>returnIt = new Intent(Intent.ACTION_VIEW, myBlogUri); <br> <br> <br>2，Google map <br>Uri mapUri = Uri.parse(&quot;geo:38.899533,-77.036476&quot;); <br>returnIt = new Intent(Intent.ACTION_VIEW, mapUri); <br> <br> <br>3，show dialer tel <br>Uri telUri = Uri.parse(&quot;tel:100861&quot;); <br>returnIt = new Intent(Intent.ACTION_DIAL, telUri); <br> <br> <br>4，start call dialar <br>Uri callUri = Uri.parse(&quot;tel:100861&quot;); <br>returnIt = new Intent(Intent.ACTION_CALL, callUri); <br> <br> <br>5，uninstall apk <br>Uri uninstallUri = Uri.fromParts(&quot;package&quot;, &quot;xxx&quot;, null); <br>returnIt = new Intent(Intent.ACTION_DELETE, uninstallUri); <br> <br> <br>6，install apk <br>Uri installUri = Uri.fromParts(&quot;package&quot;, &quot;xxx&quot;, null); <br>returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri); <br> <br> <br>7，play audio <br>Uri playUri = Uri.parse(&quot;file:///sdcard/download/everything.mp3&quot;); <br>returnIt = new Intent(Intent.ACTION_VIEW, playUri); <br> <br> <br>8，show send email ui <br>Uri emailUri = Uri.parse(&quot;mailto:shenrenkui@gmail.com&quot;); <br>returnIt = new Intent(Intent.ACTION_SENDTO, emailUri); <br> <br> <br>9，send email <br>returnIt = new Intent(Intent.ACTION_SEND); <br>String[] tos = { &quot;shenrenkui@gmail.com&quot; }; <br>String[] ccs = { &quot;shenrenkui@gmail.com&quot; }; <br>returnIt.putExtra(Intent.EXTRA_EMAIL, tos); <br>returnIt.putExtra(Intent.EXTRA_CC, ccs); <br>returnIt.putExtra(Intent.EXTRA_TEXT, &quot;body&quot;); <br>returnIt.putExtra(Intent.EXTRA_SUBJECT, &quot;subject&quot;); <br>returnIt.setType(&quot;message/rfc882&quot;); <br>Intent.createChooser(returnIt, &quot;Choose Email Client&quot;); <br> <br> <br>10，send sms <br>Uri smsUri = Uri.parse(&quot;tel:100861&quot;); <br>returnIt = new Intent(Intent.ACTION_VIEW, smsUri); <br>returnIt.putExtra(&quot;sms_body&quot;, &quot;shenrenkui&quot;); <br>returnIt.setType(&quot;vnd.android-dir/mms-sms&quot;); <br> <br> <br>11，send email <br>Uri smsToUri = Uri.parse(&quot;smsto://100861&quot;); <br>returnIt = new Intent(Intent.ACTION_SENDTO, smsToUri); <br>returnIt.putExtra(&quot;sms_body&quot;, &quot;shenrenkui&quot;); <br> <br> <br>12，send mms <br>Uri mmsUri = Uri.parse(&quot;content://media/external/images/media/23&quot;); <br>returnIt = new Intent(Intent.ACTION_SEND); <br>returnIt.putExtra(&quot;sms_body&quot;, &quot;shenrenkui&quot;); <br>returnIt.putExtra(Intent.EXTRA_STREAM, mmsUri); <br>returnIt.setType(&quot;image/png&quot;);  <br> <br>if you have other intent,please share to me ,thx. <br> <br>useful resource link here: <br> <br>http://kuikui.javaeye.com/blog/318627 <!--v:3.2--> ]]></description>
<category><![CDATA[技术文章]]></category>
<author><![CDATA[287868587@qq.com(椰子林)]]></author>
<comments>http://287868587.qzone.qq.com/blog/1247460805#comment</comments>
<qz:effect>134217728</qz:effect>
<pubDate>Mon, 13 Jul 2009 04:53:25 GMT</pubDate>
<guid>http://287868587.qzone.qq.com/blog/1247460805</guid>
</item>

<item>
<title><![CDATA[TableLayout]]></title>
<link>http://287868587.qzone.qq.com/blog/1247324446</link>
<description><![CDATA[操,搞了好久 <br>搞过不记得了,郁闷! <br>如果要让组件自动伸展,注意看粗体部分!!数字表示列索引!! <br><wbr /><a href="http://b19.photo.store.qq.com/http_imgload.cgi?/rurl4_b=df2a9c20bb99987e6fabb9a4a861dfc33a132d029d9ecd0847cb89cca779a2e072d2cb2dee550866e7a64337780833a7001770c6a4912b846c85d5f5ed9db9e3c69a8b881e45924d2398880f04f45009a45d6848" target="_blank"><img style="width:353px;height:632px;border:0;" src="http://b19.photo.store.qq.com/http_imgload.cgi?/rurl4_b=df2a9c20bb99987e6fabb9a4a861dfc33a132d029d9ecd0847cb89cca779a2e072d2cb2dee550866e7a64337780833a7001770c6a4912b846c85d5f5ed9db9e3c69a8b881e45924d2398880f04f45009a45d6848" /></a><wbr /> <br>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; <br> <br>&lt;TableLayout android:id=&quot;@+id/TableLayout01&quot; <br>    android:layout_width=&quot;fill_parent&quot; android:layout_height=&quot;fill_parent&quot; <br>    xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot; <br>   <span style="font-style:italic"><wbr /><span style="font-weight:bold"><wbr /> android:stretchColumns=&quot;1&quot; android:shrinkColumns=&quot;1&quot;</span><wbr /></span><wbr />&gt; <br>    &lt;TableRow android:id=&quot;@+id/TableRow01&quot; <br>        android:layout_width=&quot;fill_parent&quot; <br>        android:layout_height=&quot;fill_parent&quot;&gt; <br>        &lt;TextView android:id=&quot;@+id/add_lbl_name&quot; <br>            android:layout_width=&quot;wrap_content&quot; <br>            android:layout_height=&quot;wrap_content&quot; android:text=&quot;姓名:&quot;&gt; <br>        &lt;/TextView&gt; <br>        &lt;EditText android:id=&quot;@+id/add_txt_name&quot; <br>            android:layout_height=&quot;wrap_content&quot; <br>            android:layout_width=&quot;fill_parent&quot;&gt; <br>        &lt;/EditText&gt; <br>    &lt;/TableRow&gt; <br>    &lt;TableRow android:id=&quot;@+id/TableRow02&quot; <br>        android:layout_width=&quot;fill_parent&quot; <br>        android:layout_height=&quot;fill_parent&quot;&gt; <br>        &lt;TextView android:id=&quot;@+id/add_lbl_desc&quot; <br>            android:layout_width=&quot;fill_parent&quot; <br>            android:layout_height=&quot;fill_parent&quot; android:layout_span=&quot;2&quot; <br>            android:text=&quot;描述:&quot;&gt; <br>        &lt;/TextView&gt; <br>    &lt;/TableRow&gt; <br>    &lt;TableRow android:id=&quot;@+id/TableRow03&quot; <br>        &gt; <br>        &lt;EditText android:id=&quot;@+id/add_txt_desc&quot; <br>            android:scrollbars=&quot;vertical&quot; android:layout_height=&quot;wrap_content&quot; <br>            android:layout_span=&quot;2&quot; android:layout_width=&quot;wrap_content&quot; <br>            android:singleLine=&quot;false&quot; android:layout_weight=&quot;1&quot;&gt; <br>        &lt;/EditText&gt; <br>    &lt;/TableRow&gt; <br>&lt;/TableLayout&gt; <br> <!--v:3.2--> ]]></description>
<category><![CDATA[技术文章]]></category>
<author><![CDATA[287868587@qq.com(椰子林)]]></author>
<comments>http://287868587.qzone.qq.com/blog/1247324446#comment</comments>
<qz:effect>134218241</qz:effect>
<pubDate>Sat, 11 Jul 2009 15:00:46 GMT</pubDate>
<guid>http://287868587.qzone.qq.com/blog/1247324446</guid>
</item>

<item>
<title><![CDATA[Activity生命周期]]></title>
<link>http://287868587.qzone.qq.com/blog/1247187902</link>
<description><![CDATA[注意到在Activity的API中有大量的onXXXX形式的函数定义，除了我们前面用到的onCreate以外，还有 onStart，onStop以及onPause等等。从字面上看，它们是一些事件回调，那么次序又是如何的呢？其实这种事情，自己做个实验最明白不过了。在做这个实验之前，我们先得找到在Android中的Log是如何输出的。 <br> <br>显然，我们要用的是android.util.log类，这个类相当的简单易用，因为它提供的全是一些静态方法： <br> <br>Log.v(String tag, String msg);        //VERBOSE <br> Log.d(String tag, String msg);       //DEBUG     <br> Log.i(String tag, String msg);        //INFO <br> Log.w(String tag, String msg);     //WARN <br> Log.e(String tag, String msg);      //ERROR <br> <br>前面的tag是由我们定义的一个标识，一般可以用“类名_方法名“来定义。 <br>输出的LOG信息，如果用Eclipse+ADT开发，在LogCat中就可以看到，否则用adb logcat也行，不过我是从来都依赖于IDE环境的。 <br> <br>好了，现在我们修改前面的HelloThree代码： <br> <br>    public   void  onStart() <br>      ... { <br>          super .onStart(); <br>         Log.v(TAG, &quot; onStart &quot; ); <br>     }  <br>      public   void  onStop() <br>      ... { <br>          super .onStop(); <br>         Log.v(TAG, &quot; onStop &quot; ); <br>     }  <br>      public   void  onResume() <br>      ... { <br>          super .onResume(); <br>         Log.v(TAG, &quot; onResume &quot; ); <br>     }  <br>      public   void  onRestart() <br>      ... { <br>          super .onRestart(); <br>         Log.v(TAG, &quot; onReStart &quot; ); <br>     }  <br>      public   void  onPause() <br>      ... { <br>          super .onPause(); <br>         Log.v(TAG, &quot; onPause &quot; ); <br>     }  <br>      public   void  onDestroy() <br>      ... { <br>          super .onDestroy(); <br>         Log.v(TAG, &quot; onDestroy &quot; ); <br>     }  <br>      public   void  onFreeze(Bundle outState) <br>      ... { <br>          super .onFreeze(outState); <br>         Log.v(TAG, &quot; onFreeze &quot; ); <br>     }  <br>在HelloThreeB中也同样增加这样的代码，编译，运行一下，从logcat中分析输出的日志。 <br>在启动第一个界面Activity One时，它的次序是： <br>onCreate (ONE) - onStart (ONE) - onResume(ONE)  <br>虽然是第一次启动，也要走一遍这个resume事件。然后，我们点goto跳到第二个Activity Two中（前一个没有关闭），这时走的次序是： <br>onFreeze(ONE) - onPause(ONE) - onCreate(TWO) - onStart(TWO) - onResume(TWO) - onStop(ONE)  <br>说明，第二个Activity Two在启动前，One会经历一个：冻结、暂停的过程，在启动Two后，One才会被停止？ <br>然后，我们再点back回到第一个界面，这时走的次序是： <br>onPause(TWO) - onActivityResult(ONE) - onStart(ONE) - onRestart(ONE) - onResume(ONE) - onStop(TWO) - onDestroy(TWO)  <br>说明，返回时，Two没有经历冻结就直接暂停了，在One接收参数，重启后，Two就停止并被销毁了。 <br>最后，我们点一下Exit退出应用，它的次序是： <br>onPause(ONE) - onStop(ONE) - onDestroy(ONE)  <br>说明如果我们用了finish的话，不会有freeze，但是仍会经历pause - stop才被销毁。 <br> <br>这里有点疑问的是：为什么回来时先是Start才是Restart？可是文档中的图上画的却是先restart再start的啊？不过，后面的表格中的描述好象是正确的，start后面总是跟着resume（如果是第一次）或者restart（如果原来被stop掉了，这种情况会在start与 resume中插一个restart）。 <br> <br>下面不跑例子了，看看文档吧。 <br> <br>1.Android用Activity Stack来管理多个Activity，所以呢，同一时刻只会有最顶上的那个Activity是处于active或者running状态。其它的Activity都被压在下面了。 <br> <br>2.如果非活动的Activity仍是可见的（即如果上面压着的是一个非全屏的Activity或透明的Activity），它是处于paused状态的。在系统内存不足的情况下，paused状态的Activity是有可被系统杀掉的。只是不明白，如果它被干掉了，界面上的显示又会变成什么模样？看来下回有必要研究一下这种情况了。 <br> <br>3.几个事件的配对可以比较清楚地理解它们的关系。Create与Destroy配成一对，叫entrie lifetime，在创建时分配资源，则在销毁时释放资源；往上一点还有Start与Stop一对，叫visible lifetime，表达的是可见与非可见这么一个过程；最顶上的就是Resume和Pause这一对了，叫foreground lifetime，表达的了是否处于激活状态的过程。 <br> <br>4.因此，我们实现的Activity派生类，要重载两个重要的方法：onCreate()进行初始化操作，onPause()保存当前操作的结果。 <br> <br>除了Activity Lifecycle以外，Android还有一个Process Lifecycle的说明： <br> <br>在内存不足的时候，Android是会主动清理门户的，那它又是如何判断哪个process是可以清掉的呢？文档中也提到了它的重要性排序： <br> <br>1.最容易被清掉的是empty process，空进程是指那些没有Activity与之绑定，也没有任何应用程序组件（如Services或者IntentReceiver）与之绑定的进程，也就是说在这个process中没有任何activity或者service之类的东西，它们仅仅是作为一个cache，在启动新的 Activity时可以提高速度。它们是会被优先清掉的。因此建议，我们的后台操作，最好是作成Service的形式，也就是说应该在Activity中启动一个Service去执行这些操作。 <br> <br>2.接下来就是background activity了，也就是被stop掉了那些activity所处的process，那些不可见的Activity被清掉的确是安全的，系统维持着一个 LRU列表，多个处于background的activity都在这里面，系统可以根据LRU列表判断哪些activity是可以被清掉的，以及其中哪一个应该是最先被清掉。不过，文档中提到在这个已被清掉的Activity又被重新创建的时候，它的onCreate会被调用，参数就是onFreeze时的那个Bundle。不过这里有一点不明白的是，难道这个Activity被killed时，Android会帮它保留着这个Bundle吗？ <br> <br>3.然后就轮到service process了，这是一个与Service绑定的进程，由startService方法启动。虽然它们不为用户所见，但一般是在处理一些长时间的操作（例如MP3的播放），系统会保护它，除非真的没有内存可用了。 <br> <br>4.接着又轮到那些visible activity了，或者说visible process。前面也谈到这个情况，被Paused的Activity也是有可能会被系统清掉，不过相对来说，它已经是处于一个比较安全的位置了。 <br> <br>5.最安全应该就是那个foreground activity了，不到迫不得已它是不会被清掉的。这种process不仅包括resume之后的activity，也包括那些onReceiveIntent之后的IntentReceiver实例。 <br> <br>在Android Application的生命周期的讨论中，文档也提到了一些需要注意的事项：因为Android应用程序的生存期并不是由应用本身直接控制的，而是由 Android系统平台进行管理的，所以，对于我们开发者而言，需要了解不同的组件Activity、Service和IntentReceiver的生命，切记的是：如果组件的选择不当，很有可能系统会杀掉一个正在进行重要工作的进程。 <br> <br> <!--v:3.2--> ]]></description>
<category><![CDATA[技术文章]]></category>
<author><![CDATA[287868587@qq.com(椰子林)]]></author>
<comments>http://287868587.qzone.qq.com/blog/1247187902#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Fri, 10 Jul 2009 01:05:02 GMT</pubDate>
<guid>http://287868587.qzone.qq.com/blog/1247187902</guid>
</item>

</channel>
</rss>

