﻿<?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-Java,J2EE,Weblogic,Oracle</title><link>http://www.blogjava.net/zygcs/</link><description>java项目随笔</description><language>zh-cn</language><lastBuildDate>Sat, 25 Apr 2026 16:52:51 GMT</lastBuildDate><pubDate>Sat, 25 Apr 2026 16:52:51 GMT</pubDate><ttl>60</ttl><item><title>  收藏 JNI串口通信多文件调用时异常</title><link>http://www.blogjava.net/zygcs/archive/2013/03/05/396100.html</link><dc:creator>龚椿深</dc:creator><author>龚椿深</author><pubDate>Tue, 05 Mar 2013 11:26:00 GMT</pubDate><guid>http://www.blogjava.net/zygcs/archive/2013/03/05/396100.html</guid><wfw:comment>http://www.blogjava.net/zygcs/comments/396100.html</wfw:comment><comments>http://www.blogjava.net/zygcs/archive/2013/03/05/396100.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zygcs/comments/commentRss/396100.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zygcs/services/trackbacks/396100.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: http://bbs.csdn.net/topics/370094675C/C++ code?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081...&nbsp;&nbsp;<a href='http://www.blogjava.net/zygcs/archive/2013/03/05/396100.html'>阅读全文</a><img src ="http://www.blogjava.net/zygcs/aggbug/396100.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zygcs/" target="_blank">龚椿深</a> 2013-03-05 19:26 <a href="http://www.blogjava.net/zygcs/archive/2013/03/05/396100.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>launcher修改--修改launcher的屏幕数</title><link>http://www.blogjava.net/zygcs/archive/2013/02/25/395699.html</link><dc:creator>龚椿深</dc:creator><author>龚椿深</author><pubDate>Mon, 25 Feb 2013 07:07:00 GMT</pubDate><guid>http://www.blogjava.net/zygcs/archive/2013/02/25/395699.html</guid><wfw:comment>http://www.blogjava.net/zygcs/comments/395699.html</wfw:comment><comments>http://www.blogjava.net/zygcs/archive/2013/02/25/395699.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zygcs/comments/commentRss/395699.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zygcs/services/trackbacks/395699.html</trackback:ping><description><![CDATA[<p style="margin: 0px; padding: 0px; color: #362e2b; font-family: Arial; line-height: 26px; background-color: #ffffff; "><span style="margin: 0px; padding: 0px; ">首先，在Launcher.java代码中，第125行</span></p><p style="margin: 0px; padding: 0px; color: #362e2b; font-family: Arial; line-height: 26px; background-color: #ffffff; "></p><div bg_java"="" style="width: 693px; color: #362e2b; line-height: 26px; "><div style="margin: 0px; "><div style="margin: 0px; "><strong style="margin: 0px; padding: 0px; ">[java]</strong>&nbsp;<a href="http://blog.csdn.net/aomandeshangxiao/article/details/6910533#" title="view plain" style="padding: 1px; background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_plain.gif); display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">view plain</a><a href="http://blog.csdn.net/aomandeshangxiao/article/details/6910533#" title="copy" style="padding: 1px; background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_copy.gif); display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">copy</a><div style="margin: 0px; position: absolute; left: 499px; top: 522px; width: 18px; height: 18px; z-index: 99; "><embed id="ZeroClipboardMovie_1" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="18" height="18" name="ZeroClipboardMovie_1" align="center" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=1&amp;width=18&amp;height=18" wmode="transparent" style="margin: 0px; padding: 0px; "></div></div></div><ol start="1"><li style="line-height: 18px; ">static&nbsp;final&nbsp;int&nbsp;SCREEN_COUNT&nbsp;=&nbsp;<span style="color: #c00000; ">5</span>;&nbsp;&nbsp;</li><li style="line-height: 18px; ">static&nbsp;final&nbsp;int&nbsp;DEFAULT_SCREEN&nbsp;=&nbsp;<span style="color: #c00000; ">2</span>;//第一页是从0开始计数，这里是把第三个页面作为默认首页&nbsp;&nbsp;</li></ol></div><br style="margin: 0px; padding: 0px; color: #362e2b; font-family: Arial; line-height: 26px; background-color: #ffffff; " /><span style="margin: 0px; padding: 0px; color: #362e2b; font-family: Arial; line-height: 26px; background-color: #ffffff; ">第一个参数定义屏幕个数，第一个参数是默认的首页。在这里，你可以做出自己的修改。但是，仅这点修改，远远不够，我们看一下launcher.xml</span><p style="margin: 0px; padding: 0px; color: #362e2b; font-family: Arial; line-height: 26px; background-color: #ffffff; "></p><p style="margin: 0px; padding: 0px; color: #362e2b; font-family: Arial; line-height: 26px; background-color: #ffffff; "></p><div bg_html"="" style="width: 693px; color: #362e2b; line-height: 26px; "><div style="margin: 0px; "><div style="margin: 0px; "><strong style="margin: 0px; padding: 0px; ">[html]</strong>&nbsp;<a href="http://blog.csdn.net/aomandeshangxiao/article/details/6910533#" title="view plain" style="padding: 1px; background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_plain.gif); display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">view plain</a><a href="http://blog.csdn.net/aomandeshangxiao/article/details/6910533#" title="copy" style="padding: 1px; background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_copy.gif); display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">copy</a><div style="margin: 0px; position: absolute; left: 499px; top: 705px; width: 18px; height: 18px; z-index: 99; "><embed id="ZeroClipboardMovie_2" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="18" height="18" name="ZeroClipboardMovie_2" align="center" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=2&amp;width=18&amp;height=18" wmode="transparent" style="margin: 0px; padding: 0px; "></div></div></div><ol start="1"><li style="line-height: 18px; "><span style="color: #993300; font-weight: bold; ">&lt;</span><span style="color: #993300; font-weight: bold; ">com.android.launcher2.DragLayer</span>&nbsp;&nbsp;</li><li style="line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red; ">xmlns:android</span>=<span style="color: blue; ">"http://schemas.android.com/apk/res/android"</span>&nbsp;&nbsp;</li><li style="line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red; ">xmlns:launcher</span>=<span style="color: blue; ">"http://schemas.android.com/apk/res/com.android.launcher"</span>&nbsp;&nbsp;</li><li style="line-height: 18px; ">&nbsp;&nbsp;</li><li style="line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red; ">android:id</span>=<span style="color: blue; ">"@+id/drag_layer"</span>&nbsp;&nbsp;</li><li style="line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red; ">android:layout_width</span>=<span style="color: blue; ">"match_parent"</span>&nbsp;&nbsp;</li><li style="line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red; ">android:layout_height</span>=<span style="color: blue; ">"match_parent"</span><span style="color: #993300; font-weight: bold; ">&gt;</span>&nbsp;&nbsp;</li><li style="line-height: 18px; ">&nbsp;&nbsp;</li><li style="line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #993300; font-weight: bold; ">&lt;</span><span style="color: #993300; font-weight: bold; ">include</span>&nbsp;<span style="color: red; ">layout</span>=<span style="color: blue; ">"@layout/all_apps"</span>&nbsp;<span style="color: #993300; font-weight: bold; ">/&gt;</span>&nbsp;&nbsp;</li><li style="line-height: 18px; ">&nbsp;&nbsp;</li><li style="line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--&nbsp;The&nbsp;workspace&nbsp;contains&nbsp;3&nbsp;screens&nbsp;of&nbsp;cells&nbsp;--&gt;&nbsp;&nbsp;</li><li style="line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #993300; font-weight: bold; ">&lt;</span><span style="color: #993300; font-weight: bold; ">com.android.launcher2.Workspace</span>&nbsp;&nbsp;</li><li style="line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red; ">android:id</span>=<span style="color: blue; ">"@+id/workspace"</span>&nbsp;&nbsp;</li><li style="line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red; ">android:layout_width</span>=<span style="color: blue; ">"match_parent"</span>&nbsp;&nbsp;</li><li style="line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red; ">android:layout_height</span>=<span style="color: blue; ">"match_parent"</span>&nbsp;&nbsp;</li><li style="line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red; ">android:scrollbars</span>=<span style="color: blue; ">"horizontal"</span>&nbsp;&nbsp;</li><li style="line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red; ">android:fadeScrollbars</span>=<span style="color: blue; ">"true"</span>&nbsp;&nbsp;</li><li style="line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red; ">launcher:defaultScreen</span>=<span style="color: blue; ">"2"</span><span style="color: #993300; font-weight: bold; ">&gt;</span>&nbsp;&nbsp;</li><li style="line-height: 18px; ">&nbsp;&nbsp;</li><li style="line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #993300; font-weight: bold; ">&lt;</span><span style="color: #993300; font-weight: bold; ">include</span>&nbsp;<span style="color: red; ">android:id</span>=<span style="color: blue; ">"@+id/cell1"</span>&nbsp;<span style="color: red; ">layout</span>=<span style="color: blue; ">"@layout/workspace_screen"</span>&nbsp;<span style="color: #993300; font-weight: bold; ">/&gt;</span>&nbsp;&nbsp;</li><li style="line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #993300; font-weight: bold; ">&lt;</span><span style="color: #993300; font-weight: bold; ">include</span>&nbsp;<span style="color: red; ">android:id</span>=<span style="color: blue; ">"@+id/cell2"</span>&nbsp;<span style="color: red; ">layout</span>=<span style="color: blue; ">"@layout/workspace_screen"</span>&nbsp;<span style="color: #993300; font-weight: bold; ">/&gt;</span>&nbsp;&nbsp;</li><li style="line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #993300; font-weight: bold; ">&lt;</span><span style="color: #993300; font-weight: bold; ">include</span>&nbsp;<span style="color: red; ">android:id</span>=<span style="color: blue; ">"@+id/cell3"</span>&nbsp;<span style="color: red; ">layout</span>=<span style="color: blue; ">"@layout/workspace_screen"</span>&nbsp;<span style="color: #993300; font-weight: bold; ">/&gt;</span>&nbsp;&nbsp;</li><li style="line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #993300; font-weight: bold; ">&lt;</span><span style="color: #993300; font-weight: bold; ">include</span>&nbsp;<span style="color: red; ">android:id</span>=<span style="color: blue; ">"@+id/cell4"</span>&nbsp;<span style="color: red; ">layout</span>=<span style="color: blue; ">"@layout/workspace_screen"</span>&nbsp;<span style="color: #993300; font-weight: bold; ">/&gt;</span>&nbsp;&nbsp;</li><li style="line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #993300; font-weight: bold; ">&lt;</span><span style="color: #993300; font-weight: bold; ">include</span>&nbsp;<span style="color: red; ">android:id</span>=<span style="color: blue; ">"@+id/cell5"</span>&nbsp;<span style="color: red; ">layout</span>=<span style="color: blue; ">"@layout/workspace_screen"</span>&nbsp;<span style="color: #993300; font-weight: bold; ">/&gt;</span>&nbsp;&nbsp;</li><li style="line-height: 18px; ">&nbsp;&nbsp;</li><li style="line-height: 18px; ">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #993300; font-weight: bold; ">&lt;/</span><span style="color: #993300; font-weight: bold; ">com.android.launcher2.Workspace</span><span style="color: #993300; font-weight: bold; ">&gt;</span>&nbsp;&nbsp;</li></ol></div><br style="margin: 0px; padding: 0px; color: #362e2b; font-family: Arial; line-height: 26px; background-color: #ffffff; " /><p style="margin: 0px; padding: 0px; color: #362e2b; font-family: Arial; line-height: 26px; background-color: #ffffff; "><span style="margin: 0px; padding: 0px; ">我们可以看到 导入了五个workspace_screen，在这里，参照你上面修改的参数，添加或者删除workspace_screen。在这里，你可能也注意到了</span></p><p style="margin: 0px; padding: 0px; color: #362e2b; font-family: Arial; line-height: 26px; background-color: #ffffff; "></p><div bg_html"="" style="width: 693px; color: #362e2b; line-height: 26px; "><div style="margin: 0px; "><div style="margin: 0px; "><strong style="margin: 0px; padding: 0px; ">[html]</strong>&nbsp;<a href="http://blog.csdn.net/aomandeshangxiao/article/details/6910533#" title="view plain" style="padding: 1px; background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_plain.gif); display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">view plain</a><a href="http://blog.csdn.net/aomandeshangxiao/article/details/6910533#" title="copy" style="padding: 1px; background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_copy.gif); display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">copy</a><div style="margin: 0px; position: absolute; left: 499px; top: 1320px; width: 18px; height: 18px; z-index: 99; "><embed id="ZeroClipboardMovie_3" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="18" height="18" name="ZeroClipboardMovie_3" align="center" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=3&amp;width=18&amp;height=18" wmode="transparent" style="margin: 0px; padding: 0px; "></div></div></div><ol start="1"><li style="line-height: 18px; "><span style="color: red; ">launcher:defaultScreen</span>=<span style="color: blue; ">"2"</span><span style="color: #993300; font-weight: bold; ">&gt;</span>&nbsp;&nbsp;</li></ol></div><p style="margin: 0px; padding: 0px; color: #362e2b; font-family: Arial; line-height: 26px; background-color: #ffffff; "></p><p style="margin: 0px; padding: 0px; color: #362e2b; font-family: Arial; line-height: 26px; background-color: #ffffff; "><span style="margin: 0px; padding: 0px; ">在这里定义的defaultScreen。</span></p><p style="margin: 0px; padding: 0px; color: #362e2b; font-family: Arial; line-height: 26px; background-color: #ffffff; "><span style="margin: 0px; padding: 0px; ">同时，要修改workspace.java中180</span></p><p style="margin: 0px; padding: 0px; color: #362e2b; font-family: Arial; line-height: 26px; background-color: #ffffff; "></p><p style="margin: 0px; padding: 0px; color: #362e2b; font-family: Arial; line-height: 26px; background-color: #ffffff; "></p><div bg_html"="" style="width: 693px; color: #362e2b; line-height: 26px; "><div style="margin: 0px; "><div style="margin: 0px; "><strong style="margin: 0px; padding: 0px; ">[html]</strong>&nbsp;<a href="http://blog.csdn.net/aomandeshangxiao/article/details/6910533#" title="view plain" style="padding: 1px; background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_plain.gif); display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">view plain</a><a href="http://blog.csdn.net/aomandeshangxiao/article/details/6910533#" title="copy" style="padding: 1px; background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_copy.gif); display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">copy</a><div style="margin: 0px; position: absolute; left: 499px; top: 1459px; width: 18px; height: 18px; z-index: 99; "><embed id="ZeroClipboardMovie_4" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="18" height="18" name="ZeroClipboardMovie_4" align="center" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=4&amp;width=18&amp;height=18" wmode="transparent" style="margin: 0px; padding: 0px; "></div></div></div><ol start="1"><li style="line-height: 18px; "><span style="color: red; ">mDefaultScreen</span>&nbsp;=&nbsp;<span style="color: blue; ">a</span>.getInt(R.styleable.Workspace_defaultScreen,&nbsp;1);&nbsp;&nbsp;</li></ol></div><br style="margin: 0px; padding: 0px; color: #362e2b; font-family: Arial; line-height: 26px; background-color: #ffffff; " /><p style="margin: 0px; padding: 0px; color: #362e2b; font-family: Arial; line-height: 26px; background-color: #ffffff; "><span style="margin: 0px; padding: 0px; ">和res/xml文件中default_workspace做出相应的修改。这样就基本上可以了。</span></p><img src ="http://www.blogjava.net/zygcs/aggbug/395699.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zygcs/" target="_blank">龚椿深</a> 2013-02-25 15:07 <a href="http://www.blogjava.net/zygcs/archive/2013/02/25/395699.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>android jni之C 和 C++ 函数实现的比较</title><link>http://www.blogjava.net/zygcs/archive/2013/01/30/394953.html</link><dc:creator>龚椿深</dc:creator><author>龚椿深</author><pubDate>Wed, 30 Jan 2013 10:44:00 GMT</pubDate><guid>http://www.blogjava.net/zygcs/archive/2013/01/30/394953.html</guid><wfw:comment>http://www.blogjava.net/zygcs/comments/394953.html</wfw:comment><comments>http://www.blogjava.net/zygcs/archive/2013/01/30/394953.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zygcs/comments/commentRss/394953.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zygcs/services/trackbacks/394953.html</trackback:ping><description><![CDATA[<p style="margin: 0px; padding: 0px; color: #454545; font-family: Tahoma, Helvetica, Arial, STHeiti; background-color: #ffffff; "><strong>代码：</strong></p><ol style="margin: 0px 0px 0px 35px; padding: 0px; list-style-position: initial; list-style-image: initial; color: #454545; font-family: Tahoma, Helvetica, Arial, STHeiti; background-color: #ffffff; "><li style="margin: 0px; padding: 0px; "><p style="margin: 0px; padding: 0px; "><strong>&nbsp;<span style="text-decoration: underline; ">jclass&nbsp;test_class&nbsp;=&nbsp;env-&gt;GetObjectClass(obj);</span></strong></p></li><li style="margin: 0px; padding: 0px; "><p style="margin: 0px; padding: 0px; "><strong><span style="text-decoration: underline; ">&nbsp;jfieldID&nbsp;id_num&nbsp;=&nbsp;env-&gt;GetFieldID(test_class,&nbsp;"num",&nbsp;"I");</span></strong></p></li></ol><p style="margin: 0px; padding: 0px; color: #454545; font-family: Tahoma, Helvetica, Arial, STHeiti; background-color: #ffffff; "><strong>编译错误提示：</strong></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: Tahoma, Helvetica, Arial, STHeiti; background-color: #ffffff; ">/home/miyuehu/work/WebJsTest/jni/jnitest.c:22:&nbsp;<strong>error:&nbsp;request&nbsp;for&nbsp;member&nbsp;'GetObjectClass'&nbsp;in&nbsp;something&nbsp;not&nbsp;a&nbsp;structure&nbsp;or&nbsp;union<br /></strong>/home/miyuehu/work/WebJsTest/jni/jnitest.c:23:&nbsp;<strong>error:&nbsp;request&nbsp;for&nbsp;member&nbsp;'GetFieldID'&nbsp;in&nbsp;something&nbsp;not&nbsp;a&nbsp;structure&nbsp;or&nbsp;union</strong></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: Tahoma, Helvetica, Arial, STHeiti; background-color: #ffffff; ">&nbsp;</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: Tahoma, Helvetica, Arial, STHeiti; background-color: #ffffff; "><strong>注意：jni.h头文件中对于***.c&nbsp;&nbsp;&amp;&nbsp;&nbsp;***.cpp采用不同的定义</strong></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: Tahoma, Helvetica, Arial, STHeiti; background-color: #ffffff; "><strong><br />jclass&nbsp;(JNICALL&nbsp;*GetObjectClass)&nbsp;&nbsp;&nbsp;(JNIEnv&nbsp;*env,&nbsp;jobject&nbsp;obj);</strong></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: Tahoma, Helvetica, Arial, STHeiti; background-color: #ffffff; "><strong>jclass&nbsp;GetObjectClass(jobject&nbsp;obj)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;functions-&gt;GetObjectClass(this,obj);<br />&nbsp;&nbsp;&nbsp;&nbsp;}</strong></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: Tahoma, Helvetica, Arial, STHeiti; background-color: #ffffff; ">&nbsp;</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: Tahoma, Helvetica, Arial, STHeiti; background-color: #ffffff; "><strong>对于***.c</strong></p><ol style="margin: 0px 0px 0px 35px; padding: 0px; list-style-position: initial; list-style-image: initial; color: #454545; font-family: Tahoma, Helvetica, Arial, STHeiti; background-color: #ffffff; "><li style="margin: 0px; padding: 0px; "><p style="margin: 0px; padding: 0px; ">jclass&nbsp;test_class&nbsp;=&nbsp;(*env)-&gt;GetObjectClass(env,&nbsp;obj);</p></li><li style="margin: 0px; padding: 0px; "><p style="margin: 0px; padding: 0px; ">jfieldID&nbsp;id_num&nbsp;=&nbsp;(*env)-&gt;GetFieldID(env,&nbsp;test_class,&nbsp;"num",&nbsp;"I");</p></li></ol><p style="margin: 0px; padding: 0px; color: #454545; font-family: Tahoma, Helvetica, Arial, STHeiti; background-color: #ffffff; ">&nbsp;</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: Tahoma, Helvetica, Arial, STHeiti; background-color: #ffffff; ">&nbsp;</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: Tahoma, Helvetica, Arial, STHeiti; background-color: #ffffff; ">对于<strong>&nbsp;***.cpp</strong></p><ol style="margin: 0px 0px 0px 35px; padding: 0px; list-style-position: initial; list-style-image: initial; color: #454545; font-family: Tahoma, Helvetica, Arial, STHeiti; background-color: #ffffff; "><li style="margin: 0px; padding: 0px; "><p style="margin: 0px; padding: 0px; ">jclass&nbsp;test_class&nbsp;=&nbsp;env-&gt;GetObjectClass(obj);&nbsp;</p></li><li style="margin: 0px; padding: 0px; "><p style="margin: 0px; padding: 0px; ">jfieldID&nbsp;id_num&nbsp;=&nbsp;env-&gt;GetFieldID(test_class,&nbsp;"num",&nbsp;"I");&nbsp;</p></li></ol><p style="margin: 0px; padding: 0px; color: #454545; font-family: Tahoma, Helvetica, Arial, STHeiti; background-color: #ffffff; ">&nbsp;</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: Tahoma, Helvetica, Arial, STHeiti; background-color: #ffffff; ">在&nbsp;C&nbsp;中，</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: Tahoma, Helvetica, Arial, STHeiti; background-color: #ffffff; ">JNI&nbsp;函数调用由&#8220;(*env)-&gt;&#8221;作前缀，目的是为了取出函数指针所引用的值。</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: Tahoma, Helvetica, Arial, STHeiti; background-color: #ffffff; ">在&nbsp;C++&nbsp;中，</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: Tahoma, Helvetica, Arial, STHeiti; background-color: #ffffff; ">JNIEnv&nbsp;类拥有处理函数指针查找的内联成员函数。</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: Tahoma, Helvetica, Arial, STHeiti; background-color: #ffffff; ">下面将说明这个细微的差异，其中，这两行代码访问同一函数，但每种语言都有各自的语法。</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: Tahoma, Helvetica, Arial, STHeiti; background-color: #ffffff; ">C&nbsp;语法：jsize&nbsp;len&nbsp;=&nbsp;(*env)-&gt;GetArrayLength(env,array);</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: Tahoma, Helvetica, Arial, STHeiti; background-color: #ffffff; ">C++&nbsp;语法：jsize&nbsp;len&nbsp;=env-&gt;GetArrayLength(array);</p><img src ="http://www.blogjava.net/zygcs/aggbug/394953.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zygcs/" target="_blank">龚椿深</a> 2013-01-30 18:44 <a href="http://www.blogjava.net/zygcs/archive/2013/01/30/394953.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ANR超时时间的定义 .</title><link>http://www.blogjava.net/zygcs/archive/2012/11/27/392094.html</link><dc:creator>龚椿深</dc:creator><author>龚椿深</author><pubDate>Tue, 27 Nov 2012 13:15:00 GMT</pubDate><guid>http://www.blogjava.net/zygcs/archive/2012/11/27/392094.html</guid><wfw:comment>http://www.blogjava.net/zygcs/comments/392094.html</wfw:comment><comments>http://www.blogjava.net/zygcs/archive/2012/11/27/392094.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zygcs/comments/commentRss/392094.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zygcs/services/trackbacks/392094.html</trackback:ping><description><![CDATA[<p style="line-height: 22.5pt;background: white; vertical-align: middle"><strong><span style="font-family: 'Microsoft YaHei'; color: black; font-size: 15pt"><a href="http://blog.csdn.net/ameyume/article/details/7038265"><span style="color: #333333; text-decoration: none; text-underline: none">ANR</span><span style="font-family: 宋体; color: #333333; text-decoration: none; text-underline: none">超时时间的定义</span><span style="color: #333333; text-decoration: none; text-underline: none"> </span></a></span></strong></p>
<p style="line-height: 22.5pt;background: white; vertical-align: middle"><span style="font-family: 'Microsoft YaHei'; color: black">android\frameworks\base\services\java\com\android\server\am\ActivityManagerService.java</span></p>
<p style="line-height: 22.5pt; text-indent: -18pt; margin: 0cm 0cm 0pt 18pt;background: white; vertical-align: middle"><span style="font-family: 'Microsoft YaHei'; color: black">1.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 'Microsoft YaHei'; color: black">broadcast</span><span style="font-family: 宋体; color: black">超时时间为</span><span style="font-family: 'Microsoft YaHei'; color: black">10</span><span style="font-family: 宋体; color: black">秒</span></p>
<p style="line-height: 22.5pt; text-indent: 21pt;background: white; vertical-align: middle"><span style="font-family: 'Microsoft YaHei'; color: black">static final int BROADCAST_TIMEOUT = 10*1000;</span></p>
<p style="text-indent: -18pt; margin: 0cm 0cm 0pt 18pt"><span>2.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">按键无响应的超时时间为</span>5<span style="font-family: 宋体">秒</span></p>
<p><span>&nbsp;&nbsp; &nbsp;static final int KEY_DISPATCHING_TIMEOUT = 5*1000;</span></p><img src ="http://www.blogjava.net/zygcs/aggbug/392094.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zygcs/" target="_blank">龚椿深</a> 2012-11-27 21:15 <a href="http://www.blogjava.net/zygcs/archive/2012/11/27/392094.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android编程之解决android-support-v4打包问题</title><link>http://www.blogjava.net/zygcs/archive/2012/10/13/389516.html</link><dc:creator>龚椿深</dc:creator><author>龚椿深</author><pubDate>Sat, 13 Oct 2012 11:06:00 GMT</pubDate><guid>http://www.blogjava.net/zygcs/archive/2012/10/13/389516.html</guid><wfw:comment>http://www.blogjava.net/zygcs/comments/389516.html</wfw:comment><comments>http://www.blogjava.net/zygcs/archive/2012/10/13/389516.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zygcs/comments/commentRss/389516.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zygcs/services/trackbacks/389516.html</trackback:ping><description><![CDATA[<p>如果工程引入了Android-support-v4的jar类库，那么在工程打包混淆时，就会出现报错提示。例如提示你：You may need to specify additional library jars (using '-libraryjars')。</p>
<p>这里先给出解决方案，稍后我们再来解释如何处理类似情况：</p>
<p>在proguard.cfg里的后面，添加如下内容：</p>
<p>1.-libraryjars /android-support-v4.jar&nbsp; <br />2.-dontwarn android.support.v4.**&nbsp; <br />3.-keep class android.support.v4.** { *; }&nbsp; 4.-keep public class * extends android.support.v4.**&nbsp; 5.-keep public class * extends android.app.Fragment&nbsp; 然后你再打包看看，应该可以正常生成apk安装包了。</p>
<p>打包出错：<br />情况一：<br />&nbsp;"类1 can't find referenced class 类2" 字面上的意思就是类1找不到类2的引用；它会建议你："You may need to specify additional library jars (using '-libraryjars').";<br />需要使用-libraryjars加上项目中使用到的第三方库就OK了。<br />例如：-libraryjars /android-support-v4.jar<br />注意：这里引用方式是当前工程的根目录（也可以配置其他目录），也就是说，你要把第三方jar放到当前目录下，否则就会警告说找不到jar文件！</p>
<p>情况二：<br />例如： can't find superclass or interface android.os.Parcelable$ClassLoaderCreator，碰到这样的情况，可以使用-dontwarn com.xx.yy.**，不对错误提出警告。<br />注意：使用这个方式的话，要确保自己没有用到这个库里面的类！否则就会抛ClassNotFoundException！</p>
<p>情况三：<br />在工程中确实用到了该类，采用上面方式还是不行。这个时候就要再增加一项：-keep class com.xx.yy.** { *;}，让当前类不混淆。</p>
<p>小结：<br />对于引用第三方包的情况，可以采用下面方式避免打包出错：<br />-libraryjars /aaa.jar<br />-dontwarn com.xx.yy.**<br />-keep class com.xx.yy.** { *;}</p>
<p>最后打包成功，还要在机子上跑跑，看看有没有问题。<br /></p><br /><br />原文链接：<a href="http://www.linuxidc.com/Linux/2012-07/66798.htm">http://www.linuxidc.com/Linux/2012-07/66798.htm</a><img src ="http://www.blogjava.net/zygcs/aggbug/389516.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zygcs/" target="_blank">龚椿深</a> 2012-10-13 19:06 <a href="http://www.blogjava.net/zygcs/archive/2012/10/13/389516.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>android Memory Management, OutOfMemoryError Note</title><link>http://www.blogjava.net/zygcs/archive/2012/09/29/388847.html</link><dc:creator>龚椿深</dc:creator><author>龚椿深</author><pubDate>Sat, 29 Sep 2012 07:53:00 GMT</pubDate><guid>http://www.blogjava.net/zygcs/archive/2012/09/29/388847.html</guid><wfw:comment>http://www.blogjava.net/zygcs/comments/388847.html</wfw:comment><comments>http://www.blogjava.net/zygcs/archive/2012/09/29/388847.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zygcs/comments/commentRss/388847.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zygcs/services/trackbacks/388847.html</trackback:ping><description><![CDATA[<p>1　</p>
<p>&nbsp;</p>
<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td id="postmessage_4606" class="t_f">
<p>&nbsp;　　<a style="font-family: Arial, sans-serif, Helvetica, Tahoma" class="relatedlink" href="http://www.apkway.com/" target="_blank"><font face="">Android</font></a><span style="font-family: Arial, sans-serif, Helvetica, Tahoma"><font face="">框架强制每个进程的24 MB内存限制。在一些旧的设备，如在G1，限制为16 MB 更低，更重要的是，由位图使用的内存限制。处理图像的应用程序，它是很容易达到此限制，并获得与OOM 异常死亡 的过程：E / dalvikvm堆（12517）：1048576字节外部分配这个 过程中过大的E / GraphicsJNI（12517）： VM将不会让我们分配1048576字节 / AndroidRuntime（12517）：关闭VM / dalvikvm（12517）：主题ID = 1：线程未捕获的异常退出（集团= 0x4001d7f0 ） E / AndroidRuntime（12517）：致命异常：主要 电子/ AndroidRuntime（12517）：java.lang.OutOfMemoryError：位图的大小超过VM的预算 ，这个限制是低得离谱 。设备，像512MB的物理RAM的Nexus之一，设置每个进程的前台活动只有5％的RAM的内存限制是一个愚蠢的错误 。但无论如何，事情是如何和我们生活-即找到如何解决它。</font></span></p>
<p><span style="font-family: Arial, sans-serif, Helvetica, Tahoma"><font face="">远远超过限制的内存分配方式有两种 ：</font></span></p>
<p><span style="font-family: Arial, sans-serif, Helvetica, Tahoma"><font face="">　　一种方法是<span style="color: #3366ff">从本机代码分配内存 。使用NDK（本地开发工具包）和JNI</span>，它可能从C级（如的malloc / free或新建/删除）分配内存，这样的分配是不计入对24 MB的限制 。这是真的，从本机代码分配内存是为从Java方便，但它可以被用来存储在RAM中的数据（即使图像数据）的一些大金额 。</font></span></p>
<p><span style="font-family: Arial, sans-serif, Helvetica, Tahoma"><font face="">　　另一种方式，<span style="color: #3366ff">其中的作品以及图像的，是使用OpenGL的纹理-纹理内存不计入限制</span> ，要查看您的应用程序确实分配多少内存可以使用<span style="color: #3366ff">android.os.Debug.getNativeHeapAllocatedSize（ ）</span>，可以使用上面介绍的两种技术的Nexus之一，我可以轻松地为一个单一的前台进程分配300MB - 10倍以上的默认24 MB的限制 ，从上面来看<span style="color: #3366ff">使用navtive代码分配内存是不在24MB的限制内的</span>（开放的GL的质地也是使用navtive代码分配内存的） 。</font></span></p></td></tr></tbody></table>
<p><span>　</span>　每个 android 平台内存限制不一样，从最开始的 16M 到 24M，以及后来的 32M，64M，或许以后会更大。</p>
<p>　　那如何获取单个 app 内存限制大小呢？</p>
<p>　　class :&nbsp;ActivityManager</p>
<div class="cnblogs_code"><pre>ActivityManager activityManager =<span> (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
activityManager.getMemoryClass();</span></pre></div>
<p><span>　　当然，ActivityManager 不单单限与此，许多对 android 程序管理的工具，都来源与此，或者从这里进行扩展。</span><span>&nbsp;</span></p>
<p>&nbsp;</p>
<hr />

<p><span>android不同设备单个进程可用内存是不一样的，可以查看/system/build.prop文件。</span></p>
<p>dalvik.vm.heapstartsize=5m<br />dalvik.vm.heapgrowthlimit=48m<br />dalvik.vm.heapsize=256m&nbsp;</p>
<p><span>heapsize参数表示单个进程可用的最大内存，但</span>如果存在如下参数：</p>
<p>dalvik.vm.heapgrowthlimit=48m表示单个进程内存被限定在48m,即程序运行过程中实际只能使用48m内存</p>
<p><span>android上的应用是java，当然需要虚拟机，而android上的应用是带有独立虚拟机的，</span><span>也就是每开一个应用就会打开一个独立的虚拟机。这样设计的原因是可以避免虚拟机崩溃导致整个系统崩溃，但代价就是需要更多内存。<span>以上这些设计确保了android的稳定性，正常情况下最多单个程序崩溃，但整个系统不会崩溃，也永远没有内存不足的提示出现。</span></span></p>
<hr />

<p>　在Android中，一个Process 只能使用16M内存（？），要是超过了这个限定就会跳出这个异常</p>
<p>　　For Android specific we should use the 'recycle' method rather than 'gc', because 'recycle' will free the memory at the same time, but calling 'gc' doesn't&nbsp;guaranty to run and free the memory for same time(if it is not too&nbsp;critical,&nbsp;we should not call gc in our code) and results can very every time.<br />One more thing using 'recycle' is faster than the 'gc' and it improves the performance.</p>
<p>即：<span style="font-family: 宋体; color: #ff0000">bitmap.recycle();</span></p>
<p>　　biamap=null;</p>
<p>效果要好于</p>
<p>　　<span style="color: #ff0000">biamap=null;</span></p>
<p>　　system.gc();</p>
<p>通过DDMS中的Heap选项卡监视内存情况：</p>
<p>1.Heap视图中部有一个Type叫做data object，即数据对象，也就是我们的程序中大量存在的类类型的对象。</p>
<p>2.在data object一行中有一列是&#8220;Total Size&#8221;，其值就是当前进程中所有Java数据对象的内存总量。</p>
<p>如果代码中存在没有释放对象引用的情况，则data object的Total Size值在每次GC后不会有明显的回落，随着操作次数的增多Total Size的值会越来越大，<br />&nbsp;&nbsp;直到到达一个上限后导致进程被kill掉。</p>
<p>2　　<span style="color: #000000; font-size: 14px">今天刚遇到的情况：发现gridview的getview中使用</span></p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码" href="javascript:void(0);"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></span></div><pre><span style="color: #000000">　　　　@Override
        </span><span style="color: #0000ff">public</span> View getView(<span style="color: #0000ff">int</span><span style="color: #000000"> position, View convertView, ViewGroup parent) {
            final View GridItem </span>=<span style="color: #000000"> mInflater.inflate(R.layout.store_catg_item,</span><span style="color: #0000ff">null</span>, <span style="color: #0000ff">false</span><span style="color: #000000">);
　　　　　　　TextView text </span>=<span style="color: #000000"> (TextView) GridItem.findViewById(R.id.store_catg_item_text);
            ImageView cover </span>=<span style="color: #000000"> (ImageView) GridItem.findViewById(R.id.store_catg_item_cover);
  </span><span style="color: #000000">          Bitmap coverimg </span>=<span style="color: #000000"> ImageUtilities.getCachedCover(magaList
                    .</span><span style="color: #0000ff">get</span>(position).id+<span style="color: #000000">ReaderConfigures.THUMB_SUFFIX_PLANE);
</span><span style="color: #000000">            String title;
            </span><span style="color: #0000ff">if</span><span style="color: #000000">(isCatg){
                title</span>= magaList.<span style="color: #0000ff">get</span><span style="color: #000000">(position).category;
                text.setText(title.toUpperCase());
            }</span><span style="color: #0000ff">else</span><span style="color: #000000">{
                title</span>= magaList.<span style="color: #0000ff">get</span><span style="color: #000000">(position).pubname;
                text.setVisibility(View.INVISIBLE);
            }
            GridItem.setTag(title);
            cover.setImageBitmap(coverimg);
            </span><span style="color: #0000ff">return</span><span style="color: #000000"> GridItem;
        }</span></pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码" href="javascript:void(0);"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></span></div></div>
<p>&nbsp;</p>
<p>滑动时内存会不断涨，直到OutOfMemory，使用Holder后便不会发生该请况，具体原因未仔细查找，标记一下。</p>
<p>&nbsp;1.对于常规开发者而言需要了解 Java的四种引用方式，比如强引用，软引用，弱引用以及虚引用。一些复杂些的程序在长期运行很可能出现类似OutOfMemoryError的异常。<br /><br />2.并不要过多的指望gc，不用的对象可以显示的设置为空，比如obj=null，java的gc使用的是一个有向图，判断一个对象是否有效看的是其他的对象能到达这个对象的顶点，有向图的相对于链表、二叉树来说开销是可想而知。<br /><br />3.Android为每个程序分配的对内存可以通过Runtime类的totalMemory() freeMemory() 两个方法获取VM的一些内存信息，</p>
<p>Runtime.getRuntime().freeMemory();</p>
<p>Formatter.formatFileSize(BaseActivity.baseContext,Runtime.getRuntime().freeMemory()));//格式化输出</p>
<p>对于系统heap内存获取，可以通过Dalvik.VMRuntime类的getMinimumHeapSize() 方法获取最小可用堆内存，同时显示释放软引用可以调用该类的gcSoftReferences() 方法，获取更多的运行内存。<br /><br />4.对于多线程的处理，如果并发的线程很多，同时有频繁的创建和释放，可以通过concurrent类的线程池解决线程创建的效率瓶颈。<br /><br />5. 不要在循环中创建过多的本地变量。</p>
<p><span style="color: #3366ff; font-size: 18pt">3.</span></p>
<p><span>　　The default heap size of android3.0 is&nbsp;<span style="color: #ff0000"><strong>48M</strong></span>.<strong><span style="color: #3366ff">Large background pictrue,button icon and the other pictrues used as ui all consume memory,and even if you have entered another activity,the resource of the previous activity still be keeped.</span></strong><span>So you had better not use the big pictrue in UI.</span></span></p>
<p><span>　　在onDestroy中会用((BitmapDrawable)mBtn.getBackground()).setCallback(null)清理背景图。按道理来说图片资源应该已经清理掉了的。仔细看Bitmap的源代码，它其实起的作用是销毁java对象BitmapDrawable，而<span style="color: #3366ff">android为了提高效率，Bitmap真正的位图数据是在ndk中用c写的，所以用setCallback是不能销毁位图数据的</span>，应该调用Bitmap的recycle()来清理内存。</span><span>在onDestroy加上<span style="color: #3366ff">((BitmapDrawable)mBtn.getBackground()).getBitmap().recycle()</span>，这样跑下来，内存情况很理想，不管在哪个activity中，使用的资源仅仅是当前activity用到的，就不会象之前到最后一个activity的时候，所有之前使用的资源都累积在内存中。</span></p>
<p>　　但新的问题又出现了，当返回之前的activity时，会出现&#8220;try to use a recycled bitmap"的异常。这真是按了葫芦起了瓢啊，内心那个沮丧。。。没办法，继续分析。看来是后加上recycle引起的， 位图肯定在内存中有引用，在返回之前的activity时，因为位图数据其实已经被销毁了，所以才造成目前的情况。在看了setBackgroundResource的源码以后，恍然大悟，android对于直接通过资源id载入的资源其实是做了cache的了，这样下次再需要此资源的时候直接从cache中得到，这也是为效率考虑。但这样做也造成了用过的资源都会在内存中，这样的设计不是很适合使用了很多大图片资源的应用，这样累积下来应用的内存峰值是很高的。看了sdk后，我用：</p>
<p>Bitmap bm = BitmapFactory.decodeResource(this.getResources(), R.drawable.splash);<br />BitmapDrawable bd = new BitmapDrawable(this.getResources(), bm);</p>
<p>mBtn.setBackgroundDrawable(bd);</p>
<p>来代替mBtn.setBackgroundResource(R.drawable.splash)。</p>
<p>销毁的时候使用：</p>
<p>BitmapDrawable bd ＝ (BitmapDrawable)mBtn.getBackground();</p>
<p>mBtn.setBackgroundResource(0);//别忘了把背景设为null，避免onDraw刷新背景时候出现used a recycled bitmap错误</p>
<p>bd.setCallback(null);<br />bd.getBitmap().recycle();</p>
<p>这样调整后，避免了在应用里缓存所有的资源，节省了宝贵的内存，而其实这样也不会造成太大效率问题，毕竟重新载入资源是非常快速，不会对性能造成很严重的影响，在xoom里我没有感受到和之前有什么区别。</p>
<p>总之，在android上使用大量位图是个比较痛苦的事，内存限制的存在对应用是个很大的瓶颈。但不用因噎费食，其实弄明白了它里面的机制，应用可以突破这些限制的。这只是其中的一种处理方法，还可以考虑BitmapFactory.Options的inSampleSize来减少内存占用。</p>
<p><span style="color: #3366ff">浏览大图的应用，可以使用JNI的方法加载图片</span></p><br /><br />引用:<a href="http://www.cnblogs.com/qiengo/archive/2012/04/25/2468372.html">http://www.cnblogs.com/qiengo/archive/2012/04/25/2468372.html</a><img src ="http://www.blogjava.net/zygcs/aggbug/388847.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zygcs/" target="_blank">龚椿深</a> 2012-09-29 15:53 <a href="http://www.blogjava.net/zygcs/archive/2012/09/29/388847.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>修改android4.0 Launcher2 桌面的列数，行数</title><link>http://www.blogjava.net/zygcs/archive/2012/09/25/388538.html</link><dc:creator>龚椿深</dc:creator><author>龚椿深</author><pubDate>Tue, 25 Sep 2012 13:14:00 GMT</pubDate><guid>http://www.blogjava.net/zygcs/archive/2012/09/25/388538.html</guid><wfw:comment>http://www.blogjava.net/zygcs/comments/388538.html</wfw:comment><comments>http://www.blogjava.net/zygcs/archive/2012/09/25/388538.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/zygcs/comments/commentRss/388538.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zygcs/services/trackbacks/388538.html</trackback:ping><description><![CDATA[<br /><br />今天需要给客户修改桌面的图标排列方法，网上搜了好多资料，都是坑爹的没用的，千遍一律到处抄袭的。<br />只好花点精力看看android源代码，<br /><br /><br />&nbsp; packages/apps/Launcher2/src/com/android/launcher2/Workspace.java<br /><br />&nbsp;&nbsp;&nbsp; private static final int DEFAULT_CELL_COUNT_X = 6;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;列数 <br />&nbsp;&nbsp;&nbsp; private static final int DEFAULT_CELL_COUNT_Y = 4;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 行数 <br /><br />修改DEFAULT_CELL_COUNT_X，DEFAULT_CELL_COUNT_Y 即可。<img src ="http://www.blogjava.net/zygcs/aggbug/388538.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zygcs/" target="_blank">龚椿深</a> 2012-09-25 21:14 <a href="http://www.blogjava.net/zygcs/archive/2012/09/25/388538.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ubuntu10.04 使用 QT</title><link>http://www.blogjava.net/zygcs/archive/2012/09/17/387879.html</link><dc:creator>龚椿深</dc:creator><author>龚椿深</author><pubDate>Mon, 17 Sep 2012 03:44:00 GMT</pubDate><guid>http://www.blogjava.net/zygcs/archive/2012/09/17/387879.html</guid><wfw:comment>http://www.blogjava.net/zygcs/comments/387879.html</wfw:comment><comments>http://www.blogjava.net/zygcs/archive/2012/09/17/387879.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zygcs/comments/commentRss/387879.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zygcs/services/trackbacks/387879.html</trackback:ping><description><![CDATA[<br /><br />sudo aptitude install libqt3-headers libqt3-mt-dev libqt3-compat-headers&nbsp; libqt3-mt <br /><br /><br /><img src ="http://www.blogjava.net/zygcs/aggbug/387879.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zygcs/" target="_blank">龚椿深</a> 2012-09-17 11:44 <a href="http://www.blogjava.net/zygcs/archive/2012/09/17/387879.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ubuntu 恢复gnome-panel</title><link>http://www.blogjava.net/zygcs/archive/2012/08/04/384753.html</link><dc:creator>龚椿深</dc:creator><author>龚椿深</author><pubDate>Sat, 04 Aug 2012 03:59:00 GMT</pubDate><guid>http://www.blogjava.net/zygcs/archive/2012/08/04/384753.html</guid><wfw:comment>http://www.blogjava.net/zygcs/comments/384753.html</wfw:comment><comments>http://www.blogjava.net/zygcs/archive/2012/08/04/384753.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zygcs/comments/commentRss/384753.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zygcs/services/trackbacks/384753.html</trackback:ping><description><![CDATA[<p>&nbsp;</p><pre data-accusearea="qContent">Ubuntu重启panel 的办法
<br />起首进入终端， 依次输入以下号令
<br />1、gconftool --recursive-unset /apps/panel
<br />2、rm -rf ~/.gconf/apps/panel
<br />3、pkill gnome-panel<br /><br />恢复收集经管图标<br />vi /etc/NetworkManager/nm-system-settings.conf<br />找到如下行：<br />managed=false<br />并批改为：<br />managed=true</pre>
<p><br />&nbsp;</p><img src ="http://www.blogjava.net/zygcs/aggbug/384753.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zygcs/" target="_blank">龚椿深</a> 2012-08-04 11:59 <a href="http://www.blogjava.net/zygcs/archive/2012/08/04/384753.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>webview 报android.database.sqlite.SQLiteCantOpenDatabaseException</title><link>http://www.blogjava.net/zygcs/archive/2012/07/02/382023.html</link><dc:creator>龚椿深</dc:creator><author>龚椿深</author><pubDate>Mon, 02 Jul 2012 12:11:00 GMT</pubDate><guid>http://www.blogjava.net/zygcs/archive/2012/07/02/382023.html</guid><wfw:comment>http://www.blogjava.net/zygcs/comments/382023.html</wfw:comment><comments>http://www.blogjava.net/zygcs/archive/2012/07/02/382023.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zygcs/comments/commentRss/382023.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zygcs/services/trackbacks/382023.html</trackback:ping><description><![CDATA[在原 main.xml&nbsp; 中添加一个 webview 控件，没有用到SQLite，居然报错。<br /><br />07-02 19:47:38.950: E/SQLiteDatabase(969): Failed to open the database. closing it.<br />07-02 19:47:38.950: E/SQLiteDatabase(969): android.database.sqlite.SQLiteCantOpenDatabaseException: unable to open database file<br />07-02 19:47:38.950: E/SQLiteDatabase(969): &nbsp;at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)<br />07-02 19:47:38.950: E/SQLiteDatabase(969): &nbsp;at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:1013)<br />07-02 19:47:38.950: E/SQLiteDatabase(969): &nbsp;at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:986)<br />07-02 19:47:38.950: E/SQLiteDatabase(969): &nbsp;at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:962)<br />07-02 19:47:38.950: E/SQLiteDatabase(969): &nbsp;at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:1043)<br />07-02 19:47:38.950: E/SQLiteDatabase(969): &nbsp;at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:1036)<br />07-02 19:47:38.950: E/SQLiteDatabase(969): &nbsp;at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:778)<br />07-02 19:47:38.950: E/SQLiteDatabase(969): &nbsp;at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:215)<br />07-02 19:47:38.950: E/SQLiteDatabase(969): &nbsp;at android.webkit.WebViewDatabase.initDatabase(WebViewDatabase.java:223)<br />07-02 19:47:38.950: E/SQLiteDatabase(969): &nbsp;at android.webkit.WebViewDatabase.init(WebViewDatabase.java:209)<br />07-02 19:47:38.950: E/SQLiteDatabase(969): &nbsp;at android.webkit.WebViewDatabase.access$000(WebViewDatabase.java:38)<br />07-02 19:47:38.950: E/SQLiteDatabase(969): &nbsp;at android.webkit.WebViewDatabase$1.run(WebViewDatabase.java:190)<br />07-02 19:47:38.950: W/dalvikvm(969): threadid=12: thread exiting with uncaught exception (group=0x409e01f8)<br />07-02 19:47:38.970: E/AndroidRuntime(969): FATAL EXCEPTION: Thread-103<br />07-02 19:47:38.970: E/AndroidRuntime(969): java.lang.NullPointerException<br />07-02 19:47:38.970: E/AndroidRuntime(969): &nbsp;at android.webkit.WebViewDatabase.initDatabase(WebViewDatabase.java:231)<br />07-02 19:47:38.970: E/AndroidRuntime(969): &nbsp;at android.webkit.WebViewDatabase.init(WebViewDatabase.java:209)<br />07-02 19:47:38.970: E/AndroidRuntime(969): &nbsp;at android.webkit.WebViewDatabase.access$000(WebViewDatabase.java:38)<br />07-02 19:47:38.970: E/AndroidRuntime(969): &nbsp;at android.webkit.WebViewDatabase$1.run(WebViewDatabase.java:190)<br />07-02 19:47:38.970: W/ActivityManager(144):&nbsp;&nbsp; Force finishing activity com.jw.Advertisement/.ADVActivity <br /><br />想了很久不知道是哪里的问题。<br />后来把原来的APK删除， 重新安装APK ，居然好了。<img src ="http://www.blogjava.net/zygcs/aggbug/382023.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zygcs/" target="_blank">龚椿深</a> 2012-07-02 20:11 <a href="http://www.blogjava.net/zygcs/archive/2012/07/02/382023.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>