<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_悟道2011</title><subtitle type="text">把握方向，踏踏实实稳固根基。</subtitle><id>http://feed.cnblogs.com/blog/u/22958/rss</id><updated>2012-02-08T03:19:14Z</updated><author><name>悟道2011</name><uri>http://www.cnblogs.com/bmate/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bmate/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/22958/rss"/><entry><id>http://www.cnblogs.com/bmate/archive/2012/02/08/2342406.html</id><title type="text">SqlClient使用存储过程并获取输出参数的指</title><summary type="text">public static int AddUser(Entity.UserInfo user) { int id = 0; //使用存储过程实现添加数据 //proc_AddUser为存储过程名称 using (SqlCommand command = new SqlCommand(&amp;quot;proc_AddUser&amp;quot;, DBService.Conn)) { //指定command对象的执行方式 command.CommandType = CommandType.StoredProcedure; //指定存储过程的参数并赋值 command.Parameters.Add(&amp;quot</summary><published>2012-02-08T03:19:00Z</published><updated>2012-02-08T03:19:00Z</updated><author><name>悟道2011</name><uri>http://www.cnblogs.com/bmate/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bmate/archive/2012/02/08/2342406.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bmate/archive/2012/02/08/2342406.html"/><content type="html">&#xD;
 &#xD;
public static int AddUser(Entity.UserInfo user)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int id = &lt;br /&gt;0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //使用存储过程实现添加数据&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;//proc_AddUser为存储过程名称&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (SqlCommand command = new &lt;br /&gt;SqlCommand("proc_AddUser", DBService.Conn))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;//指定command对象的执行方式&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; command.CommandType = &lt;br /&gt;CommandType.StoredProcedure;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;//指定存储过程的参数并赋值&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;command.Parameters.Add("@uName",SqlDbType.NVarChar,20).Value = user.Name;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; command.Parameters.Add("@uAge", SqlDbType.Int).Value = &lt;br /&gt;user.Age;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; command.Parameters.Add("@uPass", &lt;br /&gt;SqlDbType.NVarChar, 200).Value = user.Password;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;//设置输出参数&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; command.Parameters.Add("@uId", &lt;br /&gt;SqlDbType.Int).Direction&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;p&gt;=ParameterDirection.Output;&amp;nbsp;&amp;nbsp; &lt;a rel="nofollow"&gt;&lt;font color="#3d93eb"&gt;//@uId,@uName&lt;/font&gt;&lt;/a&gt;等参数必须与数据库存储过程中的参数一致&lt;br /&gt;&amp;nbsp; //执行&lt;br /&gt;&amp;nbsp; command.ExecuteNonQuery();&lt;br /&gt;&amp;nbsp; //获取输出参数的值&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;id = Convert.ToInt32(command.Parameters["@uId"].Value);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;br /&gt;&amp;nbsp; return id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;原文链接：&lt;a href="http://renhappy20066.blog.163.com/blog/static/1120807862010220103254236/"&gt;http://renhappy20066.blog.163.com/blog/static/1120807862010220103254236/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/bmate/aggbug/2342406.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bmate/archive/2012/02/08/2342406.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bmate/archive/2012/02/06/2339472.html</id><title type="text">Android中EditText的使用方法---持續更新</title><summary type="text">一.設置焦點如果在單擊某個EditText的時候想讓其他的EditText獲得輸入的焦點，那麼可以使用下面的語句，getCurrentFocus().setFocusable(false);getCurrentFocus().setFocusableInTouchMode(false);而要獲得焦點的EditText：mSearchEdit.setFocusable(true);mSearchEdit.setFocusableInTouchMode(true);mSearchEdit.requestFocus();二.設置輸入格式過濾器為EditText設置輸入的過濾器。InputFilter</summary><published>2012-02-05T17:14:00Z</published><updated>2012-02-05T17:14:00Z</updated><author><name>悟道2011</name><uri>http://www.cnblogs.com/bmate/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bmate/archive/2012/02/06/2339472.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bmate/archive/2012/02/06/2339472.html"/><content type="html">&lt;div id="blog_text" &gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #5500ff; font-size: 10pt"&gt;一&lt;/span&gt;&lt;span style="font-family: Arial; color: #5500ff; font-size: 10pt"&gt;.&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Arial; color: #5500ff; font-size: 10pt"&gt;設置焦點&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;如果在單擊某個&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;EditText&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;的時候想讓其他的&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;EditText&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;獲得輸入的焦點，那麼可以使用下面的語句，&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #ff0000; font-size: 10pt"&gt;getCurrentFocus().setFocusable(false);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #ff0000; font-size: 10pt"&gt;getCurrentFocus().setFocusableInTouchMode(false);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;而要獲得焦點的&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;EditText&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #ff0000; font-size: 10pt"&gt;mSearchEdit.setFocusable(true);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #ff0000; font-size: 10pt"&gt;mSearchEdit.setFocusableInTouchMode(true);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #ff0000; font-size: 10pt"&gt;mSearchEdit.requestFocus();&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #5500ff; font-size: 10pt"&gt;二&lt;/span&gt;&lt;span style="font-family: Arial; color: #5500ff; font-size: 10pt"&gt;.&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Arial; color: #5500ff; font-size: 10pt"&gt;設置輸入格式過濾器&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;為&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;EditText&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;設置輸入的過濾器。&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;InputFilter,&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;首先要注意的是對一個&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;EditText&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;的對象設置&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;setFilters(InputFilter[] filters)&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;，其參數是一個&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;inputFilter&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;數組，即對一個&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;EditText&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;你可以同時設置多個輸入過濾器。&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;而我們平時用的時候一般設置一個過濾器就可以了，所以可以作如下使用（以輸入數字為例）：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #ff0000; font-size: 10pt"&gt;InputFilter[] mDigitsFilters = new InputFilter[1];&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #ff0000; font-size: 10pt"&gt;mDigitsFilters[0] = new DigitsKeyListener(true, true);&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;ps: DigitsKeyListener&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;第一個參數是&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;Sign,&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;如果設置為&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;true&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;，表示允許在數字最左端有負號，否則只能輸入正數；第二個參數是&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;decimal,&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;如果設置為&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;true,&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;表示允許在數字中有一個小數點存在。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;最後&lt;/span&gt;&lt;span style="font-family: Arial; color: #ff0000; font-size: 10pt"&gt;setFilters(mDigitsFilters);&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;就&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;OK&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;了，&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;InputFilter&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;是一個接口，其實現的子類有：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #ff007f; font-size: 10pt"&gt;DateKeyListener, DateTimeKeyListener, DialerKeyListener, DigitsKeyListener, InputFilter.AllCaps, InputFilter.LengthFilter, LoginFilter, LoginFilter.PasswordFilterGMail, LoginFilter.UsernameFilterGMail, LoginFilter.UsernameFilterGeneric, NumberKeyListener, TimeKeyListener&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; font-size: 16px"&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;a href="http://file///G:/android-sdk-windows/docs/reference/android/text/method/DateKeyListener.html"&gt;DateKeyListener&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;For entering dates in a text field.&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;a href="http://file///G:/android-sdk-windows/docs/reference/android/text/method/DateTimeKeyListener.html"&gt;DateTimeKeyListener&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;For entering dates and times in the same text field.&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;a href="http://file///G:/android-sdk-windows/docs/reference/android/text/method/DialerKeyListener.html"&gt;DialerKeyListener&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;For dialing-only text entry &amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;a href="http://file///G:/android-sdk-windows/docs/reference/android/text/method/DigitsKeyListener.html"&gt;&lt;span style="color: #800080"&gt;DigitsKeyListener&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;For digits-only text entry &amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;a href="http://file///G:/android-sdk-windows/docs/reference/android/text/InputFilter.AllCaps.html"&gt;InputFilter.AllCaps&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;This filter will capitalize all the lower case letters that are added through edits.&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;a href="http://file///G:/android-sdk-windows/docs/reference/android/text/InputFilter.LengthFilter.html"&gt;InputFilter.LengthFilter&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;This filter will constrain edits not to make the length of the text greater than the specified length.&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;a href="http://file///G:/android-sdk-windows/docs/reference/android/text/LoginFilter.html"&gt;LoginFilter&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;Abstract class for filtering login-related text (user names and passwords) &amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;a href="http://file///G:/android-sdk-windows/docs/reference/android/text/LoginFilter.PasswordFilterGMail.html"&gt;LoginFilter.PasswordFilterGMail&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;This filter is compatible with GMail passwords which restricts characters to the Latin-1 (ISO8859-1) char set.&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;a href="http://file///G:/android-sdk-windows/docs/reference/android/text/LoginFilter.UsernameFilterGMail.html"&gt;LoginFilter.UsernameFilterGMail&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;This filter rejects characters in the user name that are not compatible with GMail account creation.&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;a href="http://file///G:/android-sdk-windows/docs/reference/android/text/LoginFilter.UsernameFilterGeneric.html"&gt;LoginFilter.UsernameFilterGeneric&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;This filter rejects characters in the user name that are not compatible with Google login.&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;a href="http://file///G:/android-sdk-windows/docs/reference/android/text/method/NumberKeyListener.html"&gt;&lt;span style="color: #800080"&gt;NumberKeyListener&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;For numeric text entry &amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;a href="http://file///G:/android-sdk-windows/docs/reference/android/text/method/TimeKeyListener.html"&gt;TimeKeyListener&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;For entering times in a text field.&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Arial; color: #333333; font-size: 10pt"&gt;根據解釋應該不難理解，根據你自己的需要選擇吧。&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;原文链接&lt;a href="http://hi.baidu.com/ljlkings/blog/item/9b03b40b105848d93bc763d8.html"&gt;http://hi.baidu.com/ljlkings/blog/item/9b03b40b105848d93bc763d8.html&lt;/a&gt;&lt;img src="http://www.cnblogs.com/bmate/aggbug/2339472.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bmate/archive/2012/02/06/2339472.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bmate/archive/2012/02/03/2337333.html</id><title type="text">在 SQLite 和 ListView之间格式化一些数据</title><summary type="text">我有个SQLite数据库，我是用标准的 SimpleCursorAdapto把数据库中的数据放到ListView里去，问题是，我想格式化一些database和listview之间的数据，比如我想把“price”列里的数据都除以一百，比如在数据库里是5400，显示到listview里就是54.00。这一步操作该怎么实现？sqlite本身提供的函数有限，而且sqlite是一种弱类型的数据库，实现你的要求比较困难建议自己扩展SimpleCursorAdapto，在getview中使用代码处理一下SimpleCursorAdapter simpleCursorAdapter = new Simple.</summary><published>2012-02-03T08:58:00Z</published><updated>2012-02-03T08:58:00Z</updated><author><name>悟道2011</name><uri>http://www.cnblogs.com/bmate/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bmate/archive/2012/02/03/2337333.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bmate/archive/2012/02/03/2337333.html"/><content type="html">&#xD;
 &#xD;
&lt;div &gt;我有个SQLite数据库，我是用标准的 SimpleCursorAdapto把数据库中的数据放到ListView里去，问题是，我想格式化一些database和listview之间的数据，比如我想把&amp;#8220;price&amp;#8221;列里的数据都除以一百，比如在数据库里是5400，显示到listview里就是54.00。&lt;br /&gt;这一步操作该怎么实现？&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div &gt;sqlite本身提供的函数有限，而且sqlite是一种弱类型的数据库，实现你的要求比较困难&lt;br /&gt;建议自己扩展SimpleCursorAdapto，在getview中使用代码处理一下&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;SimpleCursorAdapter simpleCursorAdapter = new SimpleCursorAdapter(..);&lt;br /&gt;&amp;nbsp;&lt;br /&gt;simpleCursorAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public boolean setViewValue(View view, Cursor cursor, int columnIndex) {&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(columnIndex == someColumnValue) {&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TextView text = (TextView) view;&amp;nbsp; // get your View&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; text.setText(String.valueOf(cursor.getInt(1)/100));&amp;nbsp; //set some data&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return true;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&lt;br /&gt;});&lt;img src="http://www.cnblogs.com/bmate/aggbug/2337333.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bmate/archive/2012/02/03/2337333.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bmate/archive/2012/02/03/2337200.html</id><title type="text">Android操作sqlite导入大量数据耗时的解决方法</title><summary type="text">在Android开发中，需要向sqlite中导入大量数据，按照一般做法是很耗时的，测试了一下，导入一条数据在100ms左右，按照这样的做法，如果导入1万条数据，大约得花17分钟，经过实际测试，确实花了17分钟左右。解决耗时的办法是利用sqlite的事务来处理。方法如下：首先获取database对象，然后执行如下方法：db.beginTransaction(); //手动设置开始事务 //数据插入操作循环 //update insert delete select可以循环嵌套操作 db.setTransactionSuccessful(); //设置事务处理成功，不设置会自动回滚不提交 db..</summary><published>2012-02-03T07:42:00Z</published><updated>2012-02-03T07:42:00Z</updated><author><name>悟道2011</name><uri>http://www.cnblogs.com/bmate/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bmate/archive/2012/02/03/2337200.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bmate/archive/2012/02/03/2337200.html"/><content type="html">&#xD;
 &#xD;
&lt;p&gt;在Android开发中，需要向sqlite中导入大量数据，按照一般做法是很耗时的，测试了一下，导入一条数据在100ms左右，按照这样的做法，如果导入1万条数据，大约得花17分钟，经过实际测试，确实花了17分钟左右。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;解决耗时的办法是利用sqlite的事务来处理。方法如下：&lt;/p&gt;&lt;br /&gt;&lt;p&gt;首先获取database对象，然后执行如下方法：&lt;/p&gt;&lt;br /&gt;&lt;p&gt;db.beginTransaction();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //手动设置开始事务 &lt;br /&gt;//数据插入操作循环 &lt;br /&gt;//update insert &lt;br /&gt;delete select可以循环嵌套操作 &lt;br /&gt;db.setTransactionSuccessful();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;//设置事务处理成功，不设置会自动回滚不提交 &lt;br /&gt;db.endTransaction();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //处理完成 &lt;/p&gt;&lt;br /&gt;&lt;p&gt;测试了一下，如果导入1万条数据，大约耗时20秒左右。性能比之前提升了一大截。&lt;br /&gt;&lt;/p&gt;原文连接：&lt;a href="http://hi.baidu.com/fgfd0/blog/item/2264d1546015d243d10906d9.html"&gt;http://hi.baidu.com/fgfd0/blog/item/2264d1546015d243d10906d9.html&lt;/a&gt;&lt;img src="http://www.cnblogs.com/bmate/aggbug/2337200.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bmate/archive/2012/02/03/2337200.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bmate/archive/2012/02/03/2337124.html</id><title type="text">在Android中查看和管理sqlite数据库</title><summary type="text">在Android中可以使用Eclipse插件DDMS来查看，也可以使用Android工具包中的adb工具来查看。android项目中的sqlite数据库位于/data/data/项目包/databases中。使用DDMS导出sqlite数据库。1、首先打开android项目的调试模式，然后找到显示DDMS：选择DDMS2、切换到DDMS，显示File Explorer窗口，找到/data/data/然后找到程序包的文件夹，打开databases，就能看到sqlite数据库文件了。选择将其导出。这样就把sqlite数据库文件以文件的方式导出来了，然后使用sqlite界面管理工具如sqlite .</summary><published>2012-02-03T07:06:00Z</published><updated>2012-02-03T07:06:00Z</updated><author><name>悟道2011</name><uri>http://www.cnblogs.com/bmate/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bmate/archive/2012/02/03/2337124.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bmate/archive/2012/02/03/2337124.html"/><content type="html">&#xD;
 &#xD;
&lt;p&gt;在Android中可以使用Eclipse插件DDMS来查看，也可以使用Android工具包中的adb工具来查看。android项目中的sqlite数据库位于/data/data/&lt;em&gt;项目包&lt;/em&gt;/databases中。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;使用DDMS导出sqlite数据库。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1、首先打开android项目的调试模式，然后找到显示DDMS：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/52253/2011032809372684.png"  alt="" /&gt;&lt;/p&gt;&lt;p&gt;选择DDMS&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/52253/2011032809375743.png"  alt="" /&gt;&lt;/p&gt;&lt;p&gt;2、切换到DDMS，显示File Explorer窗口，找到/data/data/&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/52253/2011032809381481.png"  alt="" /&gt;&lt;/p&gt;&lt;p&gt;然后找到程序包的文件夹，打开databases，就能看到sqlite数据库文件了。选择将其导出。&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/52253/2011032809391535.png"  alt="" /&gt;&lt;/p&gt;&lt;p&gt;这样就把sqlite数据库文件以文件的方式导出来了，然后使用sqlite界面管理工具如sqlite administrator、sqlite man或者firefox插件sqlite manager等打开就可以了。&lt;/p&gt;&lt;p&gt;使用adb工具访问sqlite数据库&lt;/p&gt;&lt;p&gt;Android Debug Bridge（ADB）是Android的一个通用调试工具，它可以更新设备或模拟器中的代码，可以管理预定端口，可以在设备上运行shell命令，我们知道android是基于Linux内核，它的内部文件结构也是采用linux文件组织方式，因此访问它的文件结构需要使用shell。这次我们就会用shell来访问android应用中的sqlite数据库文件。&lt;/p&gt;&lt;p&gt;1、运行cmd，切换到android-sdk目录，运行adb.exe，加上参数shell，出现#号就代表进入了shell命令模式，注意adb要在Android模拟器运行时才能进入shell：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/52253/2011032820381230.png"  alt="" /&gt;&lt;/p&gt;&lt;p&gt;2、shell命令记住两个基本命令ls和cd，类似windows命令提示行中的dir和cd，代表列出当前目录下文件列表和进入到指定目录。了解这两个命令之后，就可以找到data/data/&lt;em&gt;项目包名&lt;/em&gt;/databases：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/52253/2011032820435789.png"  alt="" /&gt;&lt;/p&gt;&lt;p&gt;找到数据库文件：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/52253/2011032820464044.png"  alt="" /&gt;&lt;/p&gt;&lt;p&gt;接下来就是使用sqlite管理工具来进行操作了。键入sqlite3 &lt;em&gt;数据库名&lt;/em&gt;就进入了sqlite管理模式了。&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/52253/2011032820531792.png"  alt="" /&gt;&lt;/p&gt;&lt;p&gt;在android的sdk中自带了sqlite3.exe，这是sqlite的官方管理工具，它是一个命令行工具。为了使用方便，将其路径注册到系统环境变量path中，即将;%Android_Home%加在Path中，这样只样运行sqlite3，就能直接打开sqlite管理工具了。&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/52253/2011032820505087.png"  alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;sqlite管理数据库篇&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;sqlite命令行工具默认是以;结束语句的。所以如果只是一行语句，要在末尾加;，或者在下一行中键入;，这样sqlite命令才会被执行。&lt;/p&gt;&lt;p&gt;sqlite常用命令：&lt;/p&gt;&lt;p&gt;.tables--查看数据库的表列表&lt;/p&gt;&lt;p&gt;.exit--退出sqlite命令行&lt;/p&gt;&lt;p&gt;其他命令可随时.help查看帮助。sql命令可直接在此命令行上执行即可：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/52253/2011032821043382.png"  alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;原文连接：&lt;/p&gt;&lt;a href="http://www.cnblogs.com/walkingp/archive/2011/03/28/1997437.html"&gt;http://www.cnblogs.com/walkingp/archive/2011/03/28/1997437.html&lt;/a&gt;&lt;img src="http://www.cnblogs.com/bmate/aggbug/2337124.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bmate/archive/2012/02/03/2337124.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bmate/archive/2012/02/02/2336169.html</id><title type="text">内存调试的东西D/dalvikvm( 809 ): GC_CONCURRENT freed</title><summary type="text">老是看到LOG日志里有些系统回收的东西。明知道是内存问题。但还真不知道怎么下手。唉，无赖啊。网上找资料海里捞针，不容易啊。看到这篇不错。1. verbosegc 一般Java虚拟机要求支持verbosegc选项，输出详细的垃圾收集调试信息。dalvik虚拟机很安静的接受verbosegc选项，然后什么都不做。dalvik虚拟机使用自己的一套LOG机制来输出调试信息。 如果在Linux下运行adb logcat命令，可以看到如下的输出： D/dalvikvm( 745): GC_CONCURRENT freed 199K, 53% free 3023K/6343K,external 0K/0K.</summary><published>2012-02-02T12:24:00Z</published><updated>2012-02-02T12:24:00Z</updated><author><name>悟道2011</name><uri>http://www.cnblogs.com/bmate/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bmate/archive/2012/02/02/2336169.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bmate/archive/2012/02/02/2336169.html"/><content type="html">&#xD;
 &#xD;
&lt;p&gt;&lt;strong&gt;老是看到LOG日志里有些系统回收的东西。明知道是内存问题。但还真不知道怎么下手。唉，无赖啊。网上找资料海里捞针，不容易啊。看到这篇不错。&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;1. verbosegc&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;一般Java虚拟机要求支持verbosegc选项，输出详细的垃圾收集调试信息。dalvik虚拟机很安静的接受verbosegc选项，然后什么都不做。dalvik虚拟机使用自己的一套LOG机制来输出调试信息。 &lt;br /&gt;&lt;br /&gt;如果在Linux下运行adb logcat命令，可以看到如下的输出： &lt;br /&gt;D/dalvikvm(&amp;nbsp; 745): GC_CONCURRENT &lt;br /&gt;freed 199K, 53% free 3023K/6343K,external 0K/0K, paused 2ms+2ms &lt;br /&gt;&lt;br /&gt;其中D/dalvikvm表示由dalvikvm输出的调试信息，括号后的数字代表dalvikvm所在进程的pid。 &lt;br /&gt;&lt;br /&gt;GC_CONCURRENT表示触发垃圾收集的原因，有以下几种：&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;GC_MALLOC, 内存分配失败时触发&lt;/li&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;GC_CONCURRENT，当分配的对象大小超过384K时触发&lt;/li&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;GC_EXPLICIT，对垃圾收集的显式调用(System.gc) &lt;/li&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;GC_EXTERNAL_ALLOC，外部内存分配失败时触发&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;freed 199K表示本次垃圾收集释放了199K的内存， &lt;br /&gt;&lt;br /&gt;53% free 3023K/6343K，其中6343K表示当前内存总量，3023K表示可用内存，53%表示可用内存占总内存的比例。 &lt;br /&gt;&lt;br /&gt;external 0K/0K，表示可用外部内存/外部内存总量 &lt;br /&gt;paused &lt;br /&gt;2ms+2ms，第一个时间值表示markrootset的时间，第二个时间值表示第二次mark的时间。如果触发原因不是GC_CONCURRENT，这一行为单个时间值，表示垃圾收集的耗时时间。 &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2. &lt;/strong&gt;&lt;strong&gt;分析&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;（1）虽然dalvikvm提供了一些调试信息，但是还缺乏一些关键信息，比如说mark和sweep的时间， &lt;br /&gt;&lt;br /&gt;分配内存失败时是因为分配多大的内存失败，还有对于SoftReference,WeakReference和PhantomReference的处理，每次垃圾收集处理了多少个这些引用等。 &lt;br /&gt;&lt;br /&gt;（2）目前dalvik所有线程共享一个内存堆，这样在分配内存时必须在线程之间互斥，可以考虑为每个内存分配一个线程局部存储堆，一些小的内存分配可以直接从该堆中分配而无须互斥锁。 &lt;br /&gt;&lt;br /&gt;（3）dalvik虚拟机中引入了concurrentmark，但是对于多核CPU，可以实现parrelmark，即可以使用多个线程同时运行mark阶段。 &lt;br /&gt;&lt;br /&gt;这些都是目前dalvik虚拟机内存管理可以做出的改进。&lt;img src="http://www.cnblogs.com/bmate/aggbug/2336169.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bmate/archive/2012/02/02/2336169.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bmate/archive/2012/02/02/2336075.html</id><title type="text">android的logcat详细用法</title><summary type="text">Android日志系统提供了记录和查看系统调试信息的功能。日志都是从各种软件和一些系统的缓冲区中记录下来的，缓冲区可以通过 logcat 命 令来查看和使用.使用logcat命令 你可以用 logcat 命令来查看系统日志缓冲区的内容:[adb] logcat [&amp;lt;option&amp;gt;] ... [&amp;lt;filter-spec&amp;gt;] ...请查看Listing of logcat Command Options ，它有对logcat命 令有详细的描述 .你也可以在你的电脑或运行在模拟器/设备上的远程adb shell端来使用logcat命 令，也可以在你的电脑上查看日志输出。$ a</summary><published>2012-02-02T09:46:00Z</published><updated>2012-02-02T09:46:00Z</updated><author><name>悟道2011</name><uri>http://www.cnblogs.com/bmate/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bmate/archive/2012/02/02/2336075.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bmate/archive/2012/02/02/2336075.html"/><content type="html">&#xD;
 &#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Android日志系统提供了记录和查看系统调试信息的功能。日志都是从各种&lt;span  href="tag.php?name=%E8%BD%AF%E4%BB%B6"&gt;软件&lt;/span&gt;和一些系统的缓冲区中记录下来的，缓冲区可以通过 logcat 命 &lt;br /&gt;令来查看和使用.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;font size="5"&gt;&lt;font color="#556b2f"&gt;使用logcat命令&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt; &lt;br /&gt;&lt;div &gt;&lt;br /&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;你可以用 logcat 命令来查看系统日志缓冲区的内容:&lt;br /&gt;[adb] logcat [&amp;lt;option&amp;gt;] ... &lt;br /&gt;[&amp;lt;filter-spec&amp;gt;] ...&lt;br /&gt;请查看&lt;strong&gt;&lt;a href="http://code.google.com/intl/en/android/reference/adb.html#logcatoptions" target="_blank"&gt;Listing of logcat Command Options&lt;/a&gt; &lt;/strong&gt;，它有对logcat命 令有详细的描述 &lt;br /&gt;.&lt;br /&gt;&lt;br /&gt;你也可以在你的电脑或运行在模拟器/设备上的远程adb shell端来使用logcat命 令，也可以在你的电脑上查看日志输出。&lt;br /&gt;$ adb &lt;br /&gt;logcat&lt;br /&gt;你也这样使用：&lt;br /&gt;# logcat&lt;/blockquote&gt;&lt;/div&gt;&lt;font size="5"&gt;&lt;font color="#006400"&gt;&lt;strong&gt;过滤日志输出&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt; &lt;br /&gt;&lt;div &gt;&lt;br /&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;每一个输出的Android日志信息都有一个标签和它的优先级.&lt;br /&gt;日志的标签是系统部件原始信息的一个简要的标志。（比如：&amp;#8220;View&amp;#8221;就 &lt;br /&gt;是查看系统的标签）.&lt;br /&gt;优先级有下列集中，是按照从低到高顺利排列的:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; V &amp;#8212; Verbose (lowest priority)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;D &amp;#8212; Debug&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; I &amp;#8212; Info&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; W &amp;#8212; Warning&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; E &amp;#8212; Error&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; F &amp;#8212; &lt;br /&gt;Fatal&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; S &amp;#8212; Silent (highest priority, on which nothing is ever &lt;br /&gt;printed)&lt;br /&gt;在运行logcat的时候在前两列的信息中你就可以看到 logcat &lt;br /&gt;的标签列表和优先级别,它是这样标出的:&amp;lt;priority&amp;gt;/&amp;lt;tag&amp;gt; &lt;br /&gt;.&lt;br /&gt;&lt;br /&gt;下面是一个logcat输出的例子,它的优先级就似乎I,标签 &lt;br /&gt;就是ActivityManage:&lt;br /&gt;&lt;br /&gt;I/ActivityManager(&amp;nbsp; 585): Starting activity: Intent { &lt;br /&gt;action=android.intent.action...}&lt;br /&gt;&lt;br /&gt;为了让日志输出能体现管理的级别,你还可以用过滤器来控制日志输出,过滤器可以帮助你描述 &lt;br /&gt;系统的标签等级.&lt;br /&gt;&lt;br /&gt;过滤器语句按照下面的格式描tag:priority ... , tag 表 示是标签,priority &lt;br /&gt;是表示标签的报告的最低等级. 从上面的tag的中可以得到日志的优先级. 你可以在过滤器中&lt;span  href="tag.php?name=%E5%A4%9A"&gt;多&lt;/span&gt;次写tag:priority &lt;br /&gt;.&lt;br /&gt;&lt;br /&gt;这些说明都只到空白结束。下面有一个列子，例子表示支持所有的日志信息，除了那些标签 &lt;br /&gt;为&amp;#8221;ActivityManager&amp;#8221;和优先级为&amp;#8221;Info&amp;#8221;以上的和标签为&amp;#8221; MyApp&amp;#8221;和优先级为&amp;#8221; Debug&amp;#8221;以上的。 &lt;br /&gt;小等级,优先权报告为tag.&lt;br /&gt;&lt;br /&gt;adb logcat ActivityManager:I MyApp:D &lt;br /&gt;*:S&lt;br /&gt;&lt;br /&gt;上面表达式的最后的元素 *:S ,，是设置所有的标 签为&amp;#8221;silent&amp;#8221;，所有日志只显示有&amp;#8221;View&amp;#8221; and &amp;#8220;MyApp&amp;#8221;的，用 &lt;br /&gt;*:S 的另一个用处是 &lt;br /&gt;能够确保日志输出的时候是按照过滤器的说明限制的，也让过滤器也作为一项输出到日志中.&lt;br /&gt;&lt;br /&gt;下面的过滤语句指显示优先级为warning或更高的日志信息:&lt;br /&gt;adb &lt;br /&gt;logcat *:W&lt;br /&gt;&lt;br /&gt;如果你电脑上运行logcat ，相比在远程adbshell端，你还可以 为环境变量ANDROID_LOG_TAGS &lt;br /&gt;:输入一个参数来设置默认的过滤&lt;br /&gt;export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D &lt;br /&gt;*:S"&lt;br /&gt;&lt;br /&gt;需要注意的是ANDROID_LOG_TAGS 过滤器如果 通过远程shell运行logcat 或 用adb shell logcat 来 &lt;br /&gt;运行模拟器/设备不能输出日志.&lt;/blockquote&gt;&lt;/div&gt;&lt;strong&gt;&lt;font size="5"&gt;&lt;font color="#556b2f"&gt;控制 &lt;br /&gt;日志输出格式&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt; &lt;br /&gt;&lt;div &gt;&lt;br /&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;日志信息包括了许多元数据域包括标签和优先级。可以修改日志的输出格式，所以可以显示出特 定的元数据域。可以通过 -v &lt;br /&gt;选项得到格式化输出日志的相关信息.&lt;br /&gt;&lt;br /&gt;brief &amp;#8212; Display priority/tag and PID of originating &lt;br /&gt;process (the default format).&lt;br /&gt;process &amp;#8212; Display PID only.&lt;br /&gt;tag &amp;#8212; Display &lt;br /&gt;the priority/tag only.&lt;br /&gt;thread &amp;#8212; Display process:thread and priority/tag &lt;br /&gt;only.&lt;br /&gt;raw &amp;#8212; Display the raw log message, with no other metadata &lt;br /&gt;fields.&lt;br /&gt;time &amp;#8212; Display the date, invocation time, priority/tag, and PID of &lt;br /&gt;the originating process.&lt;br /&gt;long &amp;#8212; Display all metadata fields and separate &lt;br /&gt;messages with a blank lines.&lt;br /&gt;&lt;br /&gt;当启动了logcat ，你可以通过-v 选 项来指定输出格式:&lt;br /&gt;[adb] &lt;br /&gt;logcat [-v &amp;lt;format&amp;gt;]&lt;br /&gt;&lt;br /&gt;下面是用 thread 来产生的日志格式:&lt;br /&gt;adb logcat -v &lt;br /&gt;thread&lt;br /&gt;&lt;br /&gt;需要注意的是你只能-v 选项来规定输出格式 option.&lt;/blockquote&gt;&lt;/div&gt;&lt;strong&gt;&lt;font size="5"&gt;&lt;font color="#ff0000"&gt;查看 可用日志缓冲区&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt; &lt;br /&gt;&lt;div &gt;&lt;br /&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;Android日志系统有循环缓冲区，并不是所有的日志系统都有默认循环缓冲区。为了得到 日志信息，你需要通过-b 选项来启动logcat &lt;br /&gt;。如果要使用循环缓冲区，你需要查看剩余的 循环缓冲期:&lt;br /&gt;&lt;br /&gt;radio &amp;#8212; 查看缓冲区的相关的信息.&lt;br /&gt;events &amp;#8212; &lt;br /&gt;查看和事件相关的的缓冲区.&lt;br /&gt;main &amp;#8212; 查看主要的日志缓冲区&lt;br /&gt;&lt;br /&gt;-b 选项使用方法:&lt;br /&gt;[adb] logcat [-b &lt;br /&gt;&amp;lt;buffer&amp;gt;]&lt;br /&gt;&lt;br /&gt;下面的例子表示怎么查看日志缓冲区包含radio 和 telephony信息:&lt;br /&gt;adb logcat -b &lt;br /&gt;radio&lt;/blockquote&gt;&lt;/div&gt;&lt;strong&gt;&lt;font size="5"&gt;&lt;font color="#0000ff"&gt;查看 stdout &lt;br /&gt;和stderr&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt; &lt;br /&gt;&lt;div &gt;&lt;br /&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;在默认状态下，Android系统有stdout 和 stderr (System.out和System.err ) &lt;br /&gt;输出到/dev/null ， 在运行Dalvik VM的进程中，有一个系统可以备份日志文件。在这种情况下，系统会用stdout 和stderr 和 优先级 &lt;br /&gt;I.来记录日志信息&lt;br /&gt;&lt;br /&gt;通过这种方法指定输出的路径，停止运行的模拟器/设备，然后通过用setprop 命 令远程输入日志&lt;br /&gt;&lt;br /&gt;$ adb &lt;br /&gt;shell stop&lt;br /&gt;$ adb shell setprop log.redirect-stdio true&lt;br /&gt;$ adb shell &lt;br /&gt;start&lt;br /&gt;&lt;br /&gt;系统直到你关闭模拟器/设备前设置会一直保留，可以通过添加/data/local.prop 可 &lt;br /&gt;以使用模拟器/设备上的默认设置&lt;/blockquote&gt;&lt;/div&gt;&lt;strong&gt;&lt;font size="5"&gt;&lt;font color="#ff8c00"&gt;Logcat命令列表&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt; &lt;br /&gt;&lt;table  cellspacing="0"&gt;&lt;br /&gt;&lt;tbody&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;Option&lt;/td&gt;&lt;br /&gt;&lt;td&gt;Description&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;-b &amp;lt;buffer&amp;gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;加载一个可使用的日志缓冲区供查看，比如event 和radio . 默认值是main 。具体查看&lt;a href="http://code.google.com/intl/en/android/reference/adb.html#alternativebuffers" target="_blank"&gt;Viewing Alternative Log Buffers.&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;-c&lt;/td&gt;&lt;br /&gt;&lt;td&gt;清楚屏幕上的日志.&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;-d&lt;/td&gt;&lt;br /&gt;&lt;td&gt;输出日志到屏幕上.&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;-f &amp;lt;filename&amp;gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;指定输出日志信息的&amp;lt;filename&amp;gt; ， 默认是stdout .&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;-g&lt;/td&gt;&lt;br /&gt;&lt;td&gt;输出指定的日志缓冲区，输出后退出.&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;-n &amp;lt;count&amp;gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;设置日志的最大数目&amp;lt;count&amp;gt; .， 默认值是4，需要和 -r 选 项一起使用。&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;-r &amp;lt;kbytes&amp;gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;每&amp;lt;kbytes&amp;gt; 时 输出日志，默认值为16，需要和-f 选 项一起使用.&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;-s&lt;/td&gt;&lt;br /&gt;&lt;td&gt;设置默认的过滤级别为silent.&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;-v &amp;lt;format&amp;gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;设置日志输入格式，默认的是brief 格 式，要知道更多的支持的格式，参看&lt;a href="http://code.google.com/intl/en/android/reference/adb.html#outputformat" target="_blank"&gt;Controlling Log Output Format&lt;/a&gt; &lt;br /&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div id="post_rate_div_32034085"&gt;&lt;/div&gt;&lt;br /&gt;&lt;style&gt;&#xD;
.useraction{overflow:hidden;_zoom:1}&#xD;
.useraction .save_1201{float:left;width:92px;height:33px;) no-repeat 0 15px;}&#xD;
.useraction #share{float:left;width:92px;height:33px;}&#xD;
.useraction .score_1201{float:left;width:92px;height:33px;}&#xD;
#weiboto_1201{float:left;width:142px;height:33px;}&#xD;
&#xD;
&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 600px; padding-left: 100px;" &gt;&lt;a  href="http://www.cnblogs.com/bmate/admin/javascript:;"&gt;&lt;/a&gt;&lt;a id="share"  href="http://www.cnblogs.com/bmate/admin/javascript:;"&gt;&lt;/a&gt;&lt;a  href="http://www.cnblogs.com/bmate/admin/misc.php?action=rate&amp;amp;tid=1834459&amp;amp;pid=32034085"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/bmate/aggbug/2336075.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bmate/archive/2012/02/02/2336075.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bmate/archive/2012/02/02/2336071.html</id><title type="text">Android Logcat使用技巧</title><summary type="text">Android Logcat使用起来可以方便的观察调试内容，除了不能正常的显示中文外(Logcat无法显示中文输出bug依然存在) ，基本上的使用方法(巧用Logcat调试程序)。本次要说明的是平时的Log.v Log.d Log.i Log.w Log.e的区别是什么? 一、Log.v 的调试颜色为黑色的，任何消息都会输出，这里的v代表verbose啰嗦的意思，平时使用就是Log.v(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;); 二、Log.d的输出颜色是蓝色的，仅输出debug调试的意思，但他会输出上层的信息，过滤起来可以通过DDMS的Logcat标签来选择，如图 三、Log.i</summary><published>2012-02-02T09:44:00Z</published><updated>2012-02-02T09:44:00Z</updated><author><name>悟道2011</name><uri>http://www.cnblogs.com/bmate/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bmate/archive/2012/02/02/2336071.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bmate/archive/2012/02/02/2336071.html"/><content type="html">&#xD;
 &#xD;
&lt;p&gt;&lt;a href="http://www.ylmf.net/android/"&gt;&lt;u&gt;Android&lt;/u&gt;&lt;/a&gt; Logcat使用起来可以方便的观察调试内容，除了不能正常的显示中文外(Logcat无法显示中文输出bug依然存在) ，基本上的使用方法(巧用Logcat调试程序)。本次要说明的是平时的Log.v Log.d Log.i Log.w Log.e的区别是什么?&lt;/p&gt;&lt;p&gt;一、Log.v 的调试颜色为黑色的，任何消息都会输出，这里的v代表verbose啰嗦的意思，平时使用就是Log.v("","");&lt;/p&gt;&lt;p&gt;二、Log.d的输出颜色是蓝色的，仅输出debug调试的意思，但他会输出上层的信息，过滤起来可以通过DDMS的Logcat标签来选择，如图&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;center&gt;&lt;img alt="" src="http://www.ylmf.net/uploads/allimg/100905/1I0362I6-0.jpg" width="425" height="132" /&gt;&lt;/center&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;三、Log.i的输出为绿色，一般提示性的消息information，它不会输出Log.v和Log.d的信息，但会显示i、w和e的信息&lt;/p&gt;&lt;p&gt;四、Log.w的意思为橙色，可以看作为warning警告，一般需要我们注意优化Android代码，同时选择它后还会输出Log.e的信息。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/bmate/aggbug/2336071.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bmate/archive/2012/02/02/2336071.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bmate/archive/2012/02/02/2336070.html</id><title type="text">Android SDK 下查看应用程序输出日志的方法</title><summary type="text">在Android程序中可以使用 android.util.Log 类来输出日志信息，该类提供了下列几个静态方法Log.v(String tag, String msg); Log.d(String tag, String msg); Log.i(String tag, String msg); Log.w(String tag, String msg); Log.e(String tag, String msg); 分别对应 Verbose, Debug, Info, Warning, Error.程序运行后并不会在 Eclipse 的控制台内输出任何信息，那么这些在程序中输出的日志跑哪去了.</summary><published>2012-02-02T09:43:00Z</published><updated>2012-02-02T09:43:00Z</updated><author><name>悟道2011</name><uri>http://www.cnblogs.com/bmate/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bmate/archive/2012/02/02/2336070.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bmate/archive/2012/02/02/2336070.html"/><content type="html">&#xD;
 &#xD;
&lt;p&gt;在Android程序中可以使用 &lt;span &gt;android&lt;/span&gt;.util.&lt;span &gt;Log&lt;/span&gt; 类来输出日志信息，该类提供了下列几个静态方法&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&lt;span &gt;Log&lt;/span&gt;.v(String tag, String msg); &lt;br /&gt;&lt;span &gt;Log&lt;/span&gt;.d(String tag, String msg); &lt;br /&gt;&lt;span &gt;Log&lt;/span&gt;.&lt;span &gt;i&lt;/span&gt;(String tag, String msg); &lt;br /&gt;&lt;span &gt;Log&lt;/span&gt;.w(String tag, String msg); &lt;br /&gt;&lt;span &gt;Log&lt;/span&gt;.e(String tag, String msg); &lt;/span&gt;&lt;/p&gt;&lt;p&gt;分别对应 Verbose, Debug, Info, Warning, Error.&lt;/p&gt;&lt;p&gt;程序运行后并不会在 Eclipse 的控制台内输出任何信息，那么这些在程序中输出的日志跑哪去了呢？ 有两种方法可以查看这些日志，最简单的方法是直接使用 &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;strong&gt;Eclipse菜单 -&amp;gt; Windows -&amp;gt; Show View -&amp;gt;Other -&amp;gt; Android -&amp;gt; LogCat&lt;/strong&gt;&lt;/span&gt; 即可；另外还可以通过SDK提供的工具来看，命令是 adb logcat ，该命令执行后会以tail方式实时显示出所有的日志信息。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/bmate/aggbug/2336070.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bmate/archive/2012/02/02/2336070.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bmate/archive/2012/02/02/2335979.html</id><title type="text">多个Activity之间共享数据</title><summary type="text">在Android中使用Intent在两个Activity间传递数据时，只能是基本类型数据，或者是序列化对象。Intent是一种基于消息的进程内和进程间通信模型，当我们需要在我们应用程序内部，多个Activity间进行复杂数据对象共享交互时，使用Intent就显得很不方便。此时，我们就需要一种数据共享的机制来实现。当然，直接使用java语言中的静态变量是可以的，但在Android中有更为优雅的实现方式。The more general problem you are encountering is how to save stateacross several Activities and a.</summary><published>2012-02-02T08:50:00Z</published><updated>2012-02-02T08:50:00Z</updated><author><name>悟道2011</name><uri>http://www.cnblogs.com/bmate/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bmate/archive/2012/02/02/2335979.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bmate/archive/2012/02/02/2335979.html"/><content type="html">&#xD;
 &#xD;
&lt;div &gt;在Android中使用Intent在两个Activity间传递数据时，只能是基本类型数据，或者是序列化对象。Intent是一种基于消息的进程内和进程间通信模型，当我们需要在我们应用程序内部，多个Activity间进行复杂数据对象共享交互时，使用Intent就显得很不方便。此时，我们就需要一种数据共享的机制来实现。当然，直接使用java语言中的静态变量是可以的，但在Android中有更为优雅的实现方式。&lt;br /&gt;&lt;br /&gt;The &lt;br /&gt;more general problem you are encountering is how to save stateacross several &lt;br /&gt;Activities and all parts of your &lt;span &gt;application&lt;/span&gt;. A &lt;br /&gt;staticvariable (for instance, a singleton) is a common Java way of &lt;br /&gt;achievingthis. I have found however, that a more elegant way in &lt;span &gt;Android&lt;/span&gt; is toassociate your state with the &lt;span &gt;Application&lt;/span&gt; context. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--如想在整个应用中使用，在java中一般是使用静态变量，而在&lt;span &gt;android&lt;/span&gt;中有个更优雅的方式是使用&lt;span &gt;Application&lt;/span&gt; &lt;br /&gt;context。 &lt;br /&gt;&lt;br /&gt;As you know, each Activity is also a Context, which is &lt;br /&gt;informationabout its execution environment in the broadest sense. Your &lt;br /&gt;applicationalso has a context, and &lt;span &gt;Android&lt;/span&gt; guarantees &lt;br /&gt;that it will exist as asingle instance across your &lt;span &gt;application&lt;/span&gt;. &lt;br /&gt;--每个Activity 都是Context，其包含了其运行时的一些状态，&lt;span &gt;android&lt;/span&gt;保证了其是single instance的。 &lt;br /&gt;&lt;br /&gt;The way to do this is &lt;br /&gt;to create your own subclass of &lt;span &gt;android&lt;/span&gt;.&lt;span &gt;app&lt;/span&gt;.&lt;span &gt;Application&lt;/span&gt;,and then specify &lt;br /&gt;that class in the &lt;span &gt;application&lt;/span&gt; tag in your &lt;br /&gt;manifest.Now &lt;span &gt;Android&lt;/span&gt; will automatically create an &lt;br /&gt;instance of that class andmake it available for your entire &lt;span &gt;application&lt;/span&gt;. You can access it fromany context using the &lt;br /&gt;Context.getApplicationContext() method (Activityalso provides a method &lt;br /&gt;getApplication() which has the exact sameeffect): &lt;br /&gt;--方法是创建一个属于你自己的&lt;span &gt;android&lt;/span&gt;.&lt;span &gt;app&lt;/span&gt;.&lt;span &gt;Application&lt;/span&gt;的子类，然后在manifest中申明一下这个类，这是&lt;span &gt;android&lt;/span&gt;就为此建立一个全局可用的实例，你可以在其他任何地方使用Context.getApplicationContext()方法获取这个实例，进而获取其中的状态（变量）。&lt;/div&gt;&lt;div &gt;&lt;ol &gt;&lt;li&gt;&lt;span &gt;class&lt;/span&gt;&lt;span&gt; MyApp &lt;/span&gt;&lt;span &gt;extends&lt;/span&gt;&lt;span&gt; &lt;span &gt;Application&lt;/span&gt; { &lt;br /&gt;&amp;nbsp; &lt;/span&gt; &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt; &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span &gt;private&lt;/span&gt;&lt;span&gt; String myState; &lt;br /&gt;&amp;nbsp; &lt;/span&gt; &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt; &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span &gt;public&lt;/span&gt;&lt;span&gt; String getState(){ &lt;br /&gt;&amp;nbsp; &lt;/span&gt; &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span &gt;return&lt;/span&gt;&lt;span&gt; myState;&amp;nbsp;&amp;nbsp; &lt;/span&gt; &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;/span&gt; &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span &gt;public&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span &gt;void&lt;/span&gt;&lt;span&gt; setState(String s){&amp;nbsp;&amp;nbsp; &lt;/span&gt; &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myState = s;&amp;nbsp;&amp;nbsp; &lt;/span&gt; &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;/span&gt; &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;}&amp;nbsp;&amp;nbsp; &lt;/span&gt; &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt; &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span &gt;class&lt;/span&gt;&lt;span&gt; Blah &lt;/span&gt;&lt;span &gt;extends&lt;/span&gt;&lt;span&gt; Activity {&amp;nbsp;&amp;nbsp; &lt;/span&gt; &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt; &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span &gt;@Override&lt;/span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt; &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span &gt;public&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span &gt;void&lt;/span&gt;&lt;span&gt; onCreate(Bundle b){&amp;nbsp;&amp;nbsp; &lt;/span&gt; &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&amp;nbsp;&amp;nbsp; &lt;/span&gt; &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MyApp appState = ((MyApp)getApplicationContext());&amp;nbsp;&amp;nbsp; &lt;/span&gt; &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String state = appState.getState();&amp;nbsp;&amp;nbsp; &lt;/span&gt; &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&amp;nbsp;&amp;nbsp; &lt;/span&gt; &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;/span&gt; &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;}&amp;nbsp; &lt;/span&gt; &lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;p&gt;&lt;span&gt;对于Application的生命周期，今天测试了一下，Application类型在该APP被install的时候就已经实例化了，并且onCreate也已经被调用了。&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span&gt;如果需要创建类型里面可能需要用到的对象的话，就可以在构造函数里面实现，但是如果需要将该类型bind &lt;br /&gt;Service或者registerReceiver等操作时，需要将这些操作放到onCreate中，否则会抛出异常。其原因主要是这个对象还没有创建完成，此时你用这个对象来bindservice必然会出现意想不到的情况，所以在使用时还需要注意。&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/bmate/aggbug/2335979.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bmate/archive/2012/02/02/2335979.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
