posts - 93,  comments - 2,  trackbacks - 0
           
               摘要: android中跨進(jìn)程通訊的4種方式 轉(zhuǎn)自:http://www.cnblogs.com/sevenyuan/archive/2013/03/22/2975122.html由于android系統(tǒng)中應(yīng)用程序之間不能共享內(nèi)存。因此,在不同應(yīng)用程序之間交互數(shù)據(jù)(跨進(jìn)程通訊)就稍微麻煩一些。在android SDK中提供了4種用于跨進(jìn)程通訊的方式。這4種方式正好對(duì)應(yīng)于android系統(tǒng)中4種應(yīng)用...  閱讀全文
          posted @ 2015-06-24 17:28 Terry Zou 閱讀(505) | 評(píng)論 (0)編輯 收藏

          Android 手機(jī)上的應(yīng)用一般情況下都在一個(gè)進(jìn)程中運(yùn)行。

          但是,也可以指定Activity或者Service在Remote 進(jìn)程中執(zhí)行。多數(shù)情況下,只有在用戶認(rèn)為應(yīng)用退出后還需要繼續(xù)后臺(tái)長(zhǎng)期運(yùn)行的應(yīng)用,才需要這樣做。此時(shí),該應(yīng)用有兩個(gè)進(jìn)程。

          還有一種hack的方式,在apk中通過調(diào)用命令行來啟動(dòng)另外的進(jìn)程。此種方式用戶不可見,也不安全。不提倡。

          posted @ 2015-06-24 17:12 Terry Zou 閱讀(557) | 評(píng)論 (0)編輯 收藏

          官網(wǎng)幫助文檔鏈接:
           http://developer.android.com/guide/components/fragments.html

          主要看兩張圖,和跑代碼

          一,F(xiàn)ragment的生命周 

                    

          二,與Activity生命周期的對(duì)比

               

          場(chǎng)景演示 : 切換到該Fragment

          11-29 14:26:35.095: D/AppListFragment(7649): onAttach
          11-29 14:26:35.095: D/AppListFragment(7649): onCreate
          11-29 14:26:35.095: D/AppListFragment(7649): onCreateView
          11-29 14:26:35.100: D/AppListFragment(7649): onActivityCreated
          11-29 14:26:35.120: D/AppListFragment(7649): onStart
          11-29 14:26:35.120: D/AppListFragment(7649): onResume

          屏幕滅掉:

          11-29 14:27:35.185: D/AppListFragment(7649): onPause
          11-29 14:27:35.205: D/AppListFragment(7649): onSaveInstanceState
          11-29 14:27:35.205: D/AppListFragment(7649): onStop


          屏幕解鎖

          11-29 14:33:13.240: D/AppListFragment(7649): onStart
          11-29 14:33:13.275: D/AppListFragment(7649): onResume


          切換到其他Fragment:
          11-29 14:33:33.655: D/AppListFragment(7649): onPause
          11-29 14:33:33.655: D/AppListFragment(7649): onStop
          11-29 14:33:33.660: D/AppListFragment(7649): onDestroyView


          切換回本身的Fragment:

          11-29 14:33:55.820: D/AppListFragment(7649): onCreateView
          11-29 14:33:55.825: D/AppListFragment(7649): onActivityCreated
          11-29 14:33:55.825: D/AppListFragment(7649): onStart
          11-29 14:33:55.825: D/AppListFragment(7649): onResume

          回到桌面

          11-29 14:34:26.590: D/AppListFragment(7649): onPause
          11-29 14:34:26.880: D/AppListFragment(7649): onSaveInstanceState
          11-29 14:34:26.880: D/AppListFragment(7649): onStop

          回到應(yīng)用

          11-29 14:36:51.940: D/AppListFragment(7649): onStart
          11-29 14:36:51.940: D/AppListFragment(7649): onResume


          退出應(yīng)用

          11-29 14:37:03.020: D/AppListFragment(7649): onPause
          11-29 14:37:03.155: D/AppListFragment(7649): onStop
          11-29 14:37:03.155: D/AppListFragment(7649): onDestroyView
          11-29 14:37:03.165: D/AppListFragment(7649): onDestroy
          11-29 14:37:03.165: D/AppListFragment(7649): onDetach


          比Activity多了一些生命周期,完整和Activity對(duì)接上,大家好好利用。

          轉(zhuǎn)載:http://blog.csdn.net/forever_crying/article/details/8238863/

          posted @ 2015-06-24 16:05 Terry Zou 閱讀(443) | 評(píng)論 (0)編輯 收藏
          ANR(Application Not Responding)
              ANR定義:在Android上,如果你的應(yīng)用程序有一段時(shí)間響應(yīng)不夠靈敏,系統(tǒng)會(huì)向用戶顯示一個(gè)對(duì)話框,這個(gè)對(duì)話框稱作應(yīng)用程序無響應(yīng)對(duì)話框(ANR:Application Not Responding),用戶可以選擇“等待”讓應(yīng)用程序繼續(xù)運(yùn)行,也可以選擇“強(qiáng)制關(guān)閉”。所以一個(gè)順暢合理的應(yīng)用程序不會(huì)出現(xiàn)ANR,而讓用戶處理這個(gè)對(duì)話框。因此,在程序里對(duì)響應(yīng)性能的設(shè)計(jì)很重要,這樣系統(tǒng)不會(huì)顯示ANR給用戶。
              默認(rèn)情況下,Android的Activity執(zhí)行時(shí)間為5s,BroadcastReceiver的最長(zhǎng)執(zhí)行時(shí)間為10s.
              第一,什么會(huì)引發(fā)ANR
              在Android里,應(yīng)用程序響應(yīng)由Activity Manager和WindowManager系統(tǒng)服務(wù)監(jiān)視的,當(dāng)它監(jiān)聽到一下一種情況時(shí),Android就會(huì)針對(duì)特定的應(yīng)用程序顯示ANR:
              1).在5秒內(nèi)沒有響應(yīng)輸入事件(例如,按鍵按下,屏幕觸摸)
              2).BroadcastReceiver在10秒內(nèi)沒有執(zhí)行完畢
              造成以上兩點(diǎn)多原因有很多,比如在主線程中做非常耗時(shí)的操作,比如下載,IO異常等。

              潛在的耗時(shí)操作,例如網(wǎng)絡(luò)或數(shù)據(jù)庫操作或者高耗時(shí)的計(jì)算如改變位圖尺寸,這些操作應(yīng)該放在子線程中(或者以數(shù)據(jù)庫為例,通過異步請(qǐng)求的方式)來完成,然而,不是說你的主線程阻塞在那里等待子線程來完成--也不用調(diào)用Thread.wait()或Thread.sleep();替代的方法是主線程需要為子線程提供一個(gè)handler,以便完成時(shí)能夠交給主線程,以這種方式設(shè)計(jì)你的應(yīng)用程序,將能保證你的主線程保持對(duì)輸入的響應(yīng)性并能避免由于5秒輸入事件的超時(shí)引發(fā)的ANR對(duì)話框。
              第二,如何避免ANR
              1.運(yùn)行在主線程里的任何方法都盡可能少做事情。特別是,Activity應(yīng)該在它的關(guān)鍵生命周期方法(如onCreate()和onResume())里盡可能少的去做創(chuàng)建操作。(可以采用重新開啟子線程的方式,然后使用Handler+Message的方式做一些操作,比如更新主線程中的ui等)
              2.應(yīng)用程序應(yīng)該避免在BroadcastReceiver里做耗時(shí)的操作或計(jì)算。但不再是在子線程里做這些任務(wù)(因?yàn)?BroadcastReceiver的生命周期短),替代的是,如果響應(yīng)Intent廣播需要執(zhí)行一個(gè)耗時(shí)的動(dòng)作的話,應(yīng)用程序應(yīng)該啟動(dòng)一個(gè) Service。(此處需要注意的是可以在廣播接受者中啟動(dòng)Service,但是卻不可以在Service中啟動(dòng)broadcasereciver,關(guān)于原因后續(xù)會(huì)有介紹,此處不是本文重點(diǎn))
              3.避免在Intent Receiver里啟動(dòng)一個(gè)Activity,因?yàn)樗鼤?huì)創(chuàng)建一個(gè)新的畫面,并從當(dāng)前用戶正在運(yùn)行的程序上搶奪焦點(diǎn)。如果你的應(yīng)用程序在響應(yīng)Intent廣 播時(shí)需要向用戶展示什么,你應(yīng)該使用Notification Manager來實(shí)現(xiàn)。

              總結(jié):anr異常也是在程序中自己經(jīng)常遇到的問題,主要的解決辦法自己最常用的就是不要在主線程中做耗時(shí)的操作,而應(yīng)放在子線程中來實(shí)現(xiàn),比如采用Handler+mesage的方式,或者是有時(shí)候需要做一些和網(wǎng)絡(luò)相互交互的耗時(shí)操作就采用asyntask異步任務(wù)的方式(它的底層其實(shí)Handler+mesage有所區(qū)別的是它是線程池)等,在主線程中更新UI。
          posted @ 2015-06-24 16:00 Terry Zou 閱讀(312) | 評(píng)論 (0)編輯 收藏
               摘要: String string=" 歡迎你來到的 jack 的 android 使用技術(shù)總結(jié) ";                  TextV iew info2=(TextView)super.findV iewById(R.id.info); ...  閱讀全文
          posted @ 2015-06-15 14:21 Terry Zou 閱讀(226) | 評(píng)論 (0)編輯 收藏
               摘要: 開發(fā)自定義控件的步驟: 1、了解View的工作原理  2、 編寫繼承自View的子類 3、 為自定義View類增加屬性  4、 繪制控件  5、 響應(yīng)用戶消息  6 、自定義回調(diào)函數(shù)  一、View結(jié)構(gòu)原理 Android系統(tǒng)的視圖結(jié)構(gòu)的設(shè)計(jì)也采用了組合模式,即View作為所有圖形的基類,Viewgroup對(duì)View繼承...  閱讀全文
          posted @ 2015-05-19 17:29 Terry Zou 閱讀(374) | 評(píng)論 (0)編輯 收藏
               摘要: Android 管理Fragments              FragmentManager           為了管理Activity中的fragments,需要使...  閱讀全文
          posted @ 2015-05-18 18:28 Terry Zou 閱讀(432) | 評(píng)論 (0)編輯 收藏

          java.version

          Java 運(yùn)行時(shí)環(huán)境版本

          java.vendor

          Java 運(yùn)行時(shí)環(huán)境供應(yīng)商

          java.vendor.url

          Java 供應(yīng)商的 URL

          java.home

          Java 安裝目錄

          java.vm.specification.version

          Java 虛擬機(jī)規(guī)范版本

          java.vm.specification.vendor

          Java 虛擬機(jī)規(guī)范供應(yīng)商

          java.vm.specification.name

          Java 虛擬機(jī)規(guī)范名稱

          java.vm.version

          Java 虛擬機(jī)實(shí)現(xiàn)版本

          java.vm.vendor

          Java 虛擬機(jī)實(shí)現(xiàn)供應(yīng)商

          java.vm.name

          Java 虛擬機(jī)實(shí)現(xiàn)名稱

          java.specification.version

          Java 運(yùn)行時(shí)環(huán)境規(guī)范版本

          java.specification.vendor

          Java 運(yùn)行時(shí)環(huán)境規(guī)范供應(yīng)商

          java.specification.name

          Java 運(yùn)行時(shí)環(huán)境規(guī)范名稱

          java.class.version

          Java 類格式版本號(hào)

          java.class.path

          Java 類路徑

          java.library.path

          加載庫時(shí)搜索的路徑列表

          java.io.tmpdir

          默認(rèn)的臨時(shí)文件路徑

          java.compiler

          要使用的 JIT 編譯器的名稱

          java.ext.dirs

          一個(gè)或多個(gè)擴(kuò)展目錄的路徑

          os.name

          操作系統(tǒng)的名稱

          os.arch

          操作系統(tǒng)的架構(gòu)

          os.version

          操作系統(tǒng)的版本

          file.separator

          文件分隔符(在 UNIX 系統(tǒng)中是“/”)

          path.separator

          路徑分隔符(在 UNIX 系統(tǒng)中是“:”)

          line.separator

          行分隔符(在 UNIX 系統(tǒng)中是“/n”)

          user.name

          用戶的賬戶名稱

          user.home

          用戶的主目錄

          user.dir

          用戶的當(dāng)前工作目錄

          StringBuffer response = new StringBuffer();
          while ((line = reader.readLine()) != null) {
              response.append(line).append(
              System.getProperty("line.separator"));
          }

          public class SystemProperty {
           public static void main(String args[]) {  
              System.out.println("java_vendor:" + System.getProperty("java.vendor"));  
              System.out.println("java_vendor_url:"  
                       + System.getProperty("java.vendor.url"));  
              System.out.println("java_home:" + System.getProperty("java.home"));  
              System.out.println("java_class_version:"  
                       + System.getProperty("java.class.version"));  
              System.out.println("java_class_path:"  
                      + System.getProperty("java.class.path"));  
              System.out.println("os_name:" + System.getProperty("os.name"));  
              System.out.println("os_arch:" + System.getProperty("os.arch"));  
              System.out.println("os_version:" + System.getProperty("os.version"));  
              System.out.println("user_name:" + System.getProperty("user.name"));  
              System.out.println("user_home:" + System.getProperty("user.home"));  
              System.out.println("user_dir:" + System.getProperty("user.dir"));  
              System.out.println("java_vm_specification_version:"  
                      + System.getProperty("java.vm.specification.version"));  
              System.out.println("java_vm_specification_vendor:"  
                      + System.getProperty("java.vm.specification.vendor"));  
              System.out.println("java_vm_specification_name:"  
                      + System.getProperty("java.vm.specification.name"));  
              System.out.println("java_vm_version:"  
                      + System.getProperty("java.vm.version"));  
              System.out.println("java_vm_vendor:"  
                      + System.getProperty("java.vm.vendor"));  
              System.out  
                      .println("java_vm_name:" + System.getProperty("java.vm.name"));  
              System.out.println("java_ext_dirs:"  
                      + System.getProperty("java.ext.dirs"));  
              System.out.println("file_separator:"  
                      + System.getProperty("file.separator"));  
              System.out.println("path_separator:"  
                      + System.getProperty("path.separator"));  
              System.out.println("line_separator:"  
                      + System.getProperty("line.separator"));  
          }  
          轉(zhuǎn)載:http://blog.csdn.net/kongqz/article/details/3987198
          posted @ 2015-05-15 09:33 Terry Zou 閱讀(404) | 評(píng)論 (0)編輯 收藏
          當(dāng)某個(gè)activity變得“容易”被系統(tǒng)銷毀時(shí),該activity的onSaveInstanceState就會(huì)被執(zhí)行,除非該activity是被用戶主動(dòng)銷毀的,例如當(dāng)用戶按BACK鍵的時(shí)候。 
          注意上面的雙引號(hào),何為“容易”?言下之意就是該activity還沒有被銷毀,而僅僅是一種可能性。這種可能性有哪些?通過重寫一個(gè)activity的所有生命周期的onXXX方法,包括onSaveInstanceState和onRestoreInstanceState方法,我們可以清楚地知道當(dāng)某個(gè)activity(假定為activity A)顯示在當(dāng)前task的最上層時(shí),其onSaveInstanceState方法會(huì)在什么時(shí)候被執(zhí)行,有這么幾種情況: 
          1、當(dāng)用戶按下HOME鍵時(shí)。 
          這是顯而易見的,系統(tǒng)不知道你按下HOME后要運(yùn)行多少其他的程序,自然也不知道activity A是否會(huì)被銷毀,故系統(tǒng)會(huì)調(diào)用onSaveInstanceState,讓用戶有機(jī)會(huì)保存某些非永久性的數(shù)據(jù)。以下幾種情況的分析都遵循該原則 
          2、長(zhǎng)按HOME鍵,選擇運(yùn)行其他的程序時(shí)。 
          3、按下電源按鍵(關(guān)閉屏幕顯示)時(shí)。 
          4、從activity A中啟動(dòng)一個(gè)新的activity時(shí)。 
          5、屏幕方向切換時(shí),例如從豎屏切換到橫屏?xí)r。
           
          在屏幕切換之前,系統(tǒng)會(huì)銷毀activity A,在屏幕切換之后系統(tǒng)又會(huì)自動(dòng)地創(chuàng)建activity A,所以onSaveInstanceState一定會(huì)被執(zhí)行。 
          總而言之,onSaveInstanceState的調(diào)用遵循一個(gè)重要原則,即當(dāng)系統(tǒng)“未經(jīng)你許可”時(shí)銷毀了你的activity,則onSaveInstanceState會(huì)被系統(tǒng)調(diào)用,這是系統(tǒng)的責(zé)任,因?yàn)樗仨氁峁┮粋€(gè)機(jī)會(huì)讓你保存你的數(shù)據(jù)(當(dāng)然你不保存那就隨便你了)。 
          至于onRestoreInstanceState方法,需要注意的是,onSaveInstanceState方法和onRestoreInstanceState方法“不一定”是成對(duì)的被調(diào)用的,onRestoreInstanceState被調(diào)用的前提是,activity A“確實(shí)”被系統(tǒng)銷毀了,而如果僅僅是停留在有這種可能性的情況下,則該方法不會(huì)被調(diào)用,例如,當(dāng)正在顯示activity A的時(shí)候,用戶按下HOME鍵回到主界面,然后用戶緊接著又返回到activity A,這種情況下activity A一般不會(huì)因?yàn)閮?nèi)存的原因被系統(tǒng)銷毀,故activity A的onRestoreInstanceState方法不會(huì)被執(zhí)行。 
          另外,onRestoreInstanceState的bundle參數(shù)也會(huì)傳遞到onCreate方法中,你也可以選擇在onCreate方法中做數(shù)據(jù)還原。
           
          轉(zhuǎn)載:http://gundumw100.iteye.com/blog/1115080
          posted @ 2015-05-11 10:34 Terry Zou 閱讀(350) | 評(píng)論 (0)編輯 收藏

          Android中常常使用shape來定義控件的一些顯示屬性,今天看了一些shape的使用,對(duì)shape有了大體的了解,稍作總結(jié):

          先看下面的代碼:
                  <shape>
                      <!-- 實(shí)心 -->
                      <solid android:color="#ff9d77"/>
                      <!-- 漸變 -->
                      <gradient
                          android:startColor="#ff8c00"
                          android:endColor="#FFFFFF"
                          android:angle="270" />
                      <!-- 描邊 -->
                      <stroke
                          android:width="2dp"
                          android:color="#dcdcdc" />
                      <!-- 圓角 -->
                      <corners
                          android:radius="2dp" />
                      <padding
                          android:left="10dp"
                          android:top="10dp"
                          android:right="10dp"
                          android:bottom="10dp" />
                  </shape>

          solid:實(shí)心,就是填充的意思
          android:color指定填充的顏色

          gradient:漸變
          android:startColor和android:endColor分別為起始和結(jié)束顏色,ndroid:angle是漸變角度,必須為45的整數(shù)倍
          另外漸變默認(rèn)的模式為android:type="linear",即線性漸變,可以指定漸變?yōu)閺较驖u變,android:type="radial",徑向漸變需要指定半徑android:gradientRadius="50"。

          stroke:描邊
          android:width="2dp" 描邊的寬度,android:color 描邊的顏色。
          我們還可以把描邊弄成虛線的形式,設(shè)置方式為:
          android:dashWidth="5dp" 
          android:dashGap="3dp"
          其中android:dashWidth表示'-'這樣一個(gè)橫線的寬度,android:dashGap表示之間隔開的距離。

          corners:圓角
          android:radius為角的弧度,值越大角越圓。
          我們還可以把四個(gè)角設(shè)定成不同的角度,方法為:
          <corners 
                  android:topRightRadius="20dp"    右上角
                  android:bottomLeftRadius="20dp"    右下角
                  android:topLeftRadius="1dp"    左上角
                  android:bottomRightRadius="0dp"    左下角
           />
          這里有個(gè)地方需要注意,bottomLeftRadius是右下角,而不是左下角,這個(gè)有點(diǎn)郁悶,不過不影響使用,記得別搞錯(cuò)了就行。
          還有網(wǎng)上看到有人說設(shè)置成0dp無效,不過我在測(cè)試中發(fā)現(xiàn)是可以的,我用的是2.2,可能修復(fù)了這個(gè)問題吧,如果無效的話那就只能設(shè)成1dp了。

          padding:間隔
          這個(gè)就不用多說了,XML布局文件中經(jīng)常用到。


          大體的就是這樣,以下是一個(gè)使用的具體示例:用在Selector中作為Button的背景,分別定義了按鈕的一般狀態(tài)、獲得焦點(diǎn)狀態(tài)和按下時(shí)的狀態(tài),具體代碼如下:

          main.xml:
          <Button
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="TestShapeButton"
              android:background="@drawable/button_selector"
              />


          button_selector.xml:
          <?xml version="1.0" encoding="utf-8"?>
          <selector
              xmlns:android="http://schemas.android.com/apk/res/android">
              <item android:state_pressed="true" >
                  <shape>
                      <!-- 漸變 -->
                      <gradient
                          android:startColor="#ff8c00"
                          android:endColor="#FFFFFF"
                          android:type="radial"
                          android:gradientRadius="50" />
                      <!-- 描邊 -->
                      <stroke
                          android:width="2dp"
                          android:color="#dcdcdc"
                          android:dashWidth="5dp" 
                          android:dashGap="3dp" />
                      <!-- 圓角 -->
                      <corners
                          android:radius="2dp" />
                      <padding
                          android:left="10dp"
                          android:top="10dp"
                          android:right="10dp"
                          android:bottom="10dp" />
                  </shape>
              </item>

              <item android:state_focused="true" >
                  <shape>
                      <gradient
                          android:startColor="#ffc2b7"
                          android:endColor="#ffc2b7"
                          android:angle="270" />
                      <stroke
                          android:width="2dp"
                          android:color="#dcdcdc" />
                      <corners
                          android:radius="2dp" />
                      <padding
                          android:left="10dp"
                          android:top="10dp"
                          android:right="10dp"
                          android:bottom="10dp" />
                  </shape>
              </item>

              <item>       
                  <shape>
                      
          <solid android:color="#ff9d77"/>
                      <stroke
                          android:width="2dp"
                          android:color="#fad3cf" />
                      <corners 
                          android:topRightRadius="5dp"
                          android:bottomLeftRadius="5dp"
                          android:topLeftRadius="0dp"
                          android:bottomRightRadius="0dp"
                      />
                      <padding
                          android:left="10dp"
                          android:top="10dp"
                          android:right="10dp"
                          android:bottom="10dp" />
                  </shape>
              </item>
          </selector>

          運(yùn)行效果如下圖:

          一般狀態(tài):

           

          獲得焦點(diǎn)狀態(tài):

           

          按下狀態(tài):


          轉(zhuǎn)載:http://kofi1122.blog.51cto.com/2815761/521605/

          posted @ 2015-04-18 10:41 Terry Zou 閱讀(271) | 評(píng)論 (0)編輯 收藏
          僅列出標(biāo)題
          共8頁: 上一頁 1 2 3 4 5 6 7 8 下一頁 
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊(cè)

          收藏夾

          Java

          搜索

          •  

          最新隨筆

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 武穴市| 花莲市| 达州市| 嵊泗县| 溧水县| 错那县| 菏泽市| 衡东县| 乌鲁木齐市| 沙坪坝区| 桦甸市| 桂平市| 怀仁县| 惠水县| 彩票| 新乡市| 米易县| 万宁市| 财经| 裕民县| 图片| 商南县| 沐川县| 社旗县| 甘南县| 娱乐| 南投县| 河东区| 新丰县| 玛沁县| 秀山| 隆回县| 教育| 仁怀市| 潞城市| 金沙县| 泽普县| 马鞍山市| 贺州市| 浠水县| 潮安县|