<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

    Android 手機上的應用一般情況下都在一個進程中運行。

    但是,也可以指定Activity或者Service在Remote 進程中執行。多數情況下,只有在用戶認為應用退出后還需要繼續后臺長期運行的應用,才需要這樣做。此時,該應用有兩個進程。

    還有一種hack的方式,在apk中通過調用命令行來啟動另外的進程。此種方式用戶不可見,也不安全。不提倡。

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

    官網幫助文檔鏈接:
     http://developer.android.com/guide/components/fragments.html

    主要看兩張圖,和跑代碼

    一,Fragment的生命周 

              

    二,與Activity生命周期的對比

         

    場景演示 : 切換到該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

    回到應用

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


    退出應用

    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對接上,大家好好利用。

    轉載:http://blog.csdn.net/forever_crying/article/details/8238863/

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

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

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

    java.version

    Java 運行時環境版本

    java.vendor

    Java 運行時環境供應商

    java.vendor.url

    Java 供應商的 URL

    java.home

    Java 安裝目錄

    java.vm.specification.version

    Java 虛擬機規范版本

    java.vm.specification.vendor

    Java 虛擬機規范供應商

    java.vm.specification.name

    Java 虛擬機規范名稱

    java.vm.version

    Java 虛擬機實現版本

    java.vm.vendor

    Java 虛擬機實現供應商

    java.vm.name

    Java 虛擬機實現名稱

    java.specification.version

    Java 運行時環境規范版本

    java.specification.vendor

    Java 運行時環境規范供應商

    java.specification.name

    Java 運行時環境規范名稱

    java.class.version

    Java 類格式版本號

    java.class.path

    Java 類路徑

    java.library.path

    加載庫時搜索的路徑列表

    java.io.tmpdir

    默認的臨時文件路徑

    java.compiler

    要使用的 JIT 編譯器的名稱

    java.ext.dirs

    一個或多個擴展目錄的路徑

    os.name

    操作系統的名稱

    os.arch

    操作系統的架構

    os.version

    操作系統的版本

    file.separator

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

    path.separator

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

    line.separator

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

    user.name

    用戶的賬戶名稱

    user.home

    用戶的主目錄

    user.dir

    用戶的當前工作目錄

    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"));  
    }  
    轉載:http://blog.csdn.net/kongqz/article/details/3987198
    posted @ 2015-05-15 09:33 Terry Zou 閱讀(400) | 評論 (0)編輯 收藏
    當某個activity變得“容易”被系統銷毀時,該activity的onSaveInstanceState就會被執行,除非該activity是被用戶主動銷毀的,例如當用戶按BACK鍵的時候。 
    注意上面的雙引號,何為“容易”?言下之意就是該activity還沒有被銷毀,而僅僅是一種可能性。這種可能性有哪些?通過重寫一個activity的所有生命周期的onXXX方法,包括onSaveInstanceState和onRestoreInstanceState方法,我們可以清楚地知道當某個activity(假定為activity A)顯示在當前task的最上層時,其onSaveInstanceState方法會在什么時候被執行,有這么幾種情況: 
    1、當用戶按下HOME鍵時。 
    這是顯而易見的,系統不知道你按下HOME后要運行多少其他的程序,自然也不知道activity A是否會被銷毀,故系統會調用onSaveInstanceState,讓用戶有機會保存某些非永久性的數據。以下幾種情況的分析都遵循該原則 
    2、長按HOME鍵,選擇運行其他的程序時。 
    3、按下電源按鍵(關閉屏幕顯示)時。 
    4、從activity A中啟動一個新的activity時。 
    5、屏幕方向切換時,例如從豎屏切換到橫屏時。
     
    在屏幕切換之前,系統會銷毀activity A,在屏幕切換之后系統又會自動地創建activity A,所以onSaveInstanceState一定會被執行。 
    總而言之,onSaveInstanceState的調用遵循一個重要原則,即當系統“未經你許可”時銷毀了你的activity,則onSaveInstanceState會被系統調用,這是系統的責任,因為它必須要提供一個機會讓你保存你的數據(當然你不保存那就隨便你了)。 
    至于onRestoreInstanceState方法,需要注意的是,onSaveInstanceState方法和onRestoreInstanceState方法“不一定”是成對的被調用的,onRestoreInstanceState被調用的前提是,activity A“確實”被系統銷毀了,而如果僅僅是停留在有這種可能性的情況下,則該方法不會被調用,例如,當正在顯示activity A的時候,用戶按下HOME鍵回到主界面,然后用戶緊接著又返回到activity A,這種情況下activity A一般不會因為內存的原因被系統銷毀,故activity A的onRestoreInstanceState方法不會被執行。 
    另外,onRestoreInstanceState的bundle參數也會傳遞到onCreate方法中,你也可以選擇在onCreate方法中做數據還原。
     
    轉載:http://gundumw100.iteye.com/blog/1115080
    posted @ 2015-05-11 10:34 Terry Zou 閱讀(345) | 評論 (0)編輯 收藏

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

    先看下面的代碼:
            <shape>
                <!-- 實心 -->
                <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:實心,就是填充的意思
    android:color指定填充的顏色

    gradient:漸變
    android:startColor和android:endColor分別為起始和結束顏色,ndroid:angle是漸變角度,必須為45的整數倍。
    另外漸變默認的模式為android:type="linear",即線性漸變,可以指定漸變為徑向漸變,android:type="radial",徑向漸變需要指定半徑android:gradientRadius="50"。

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

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

    padding:間隔
    這個就不用多說了,XML布局文件中經常用到。


    大體的就是這樣,以下是一個使用的具體示例:用在Selector中作為Button的背景,分別定義了按鈕的一般狀態、獲得焦點狀態和按下時的狀態,具體代碼如下:

    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>

    運行效果如下圖:

    一般狀態:

     

    獲得焦點狀態:

     

    按下狀態:


    轉載:http://kofi1122.blog.51cto.com/2815761/521605/

    posted @ 2015-04-18 10:41 Terry Zou 閱讀(267) | 評論 (0)編輯 收藏
    僅列出標題
    共8頁: 上一頁 1 2 3 4 5 6 7 8 下一頁 
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    相冊

    收藏夾

    Java

    搜索

    •  

    最新隨筆

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 88av免费观看入口在线| 国产精品亚洲一区二区三区| 黄视频在线观看免费| 国产大片线上免费看| 亚洲精品无码永久在线观看男男| 一二三四影视在线看片免费 | 国产中文字幕在线免费观看| 免费h成人黄漫画嘿咻破解版| 国内成人精品亚洲日本语音| 免费A级毛片无码A∨男男| 色多多A级毛片免费看| 久久影院亚洲一区| 青青草原1769久久免费播放| 久久久亚洲精品国产| 免费能直接在线观看黄的视频| 亚洲成a人片7777| 扒开双腿猛进入爽爽免费视频| 亚洲hairy多毛pics大全| 婷婷综合缴情亚洲狠狠尤物| 九九九精品视频免费| 亚洲AV永久无码区成人网站| 99爱视频99爱在线观看免费| 亚洲国产成人久久| 日韩免费视频一区| aa在线免费观看| 亚洲成aⅴ人片在线观| 国产成人精品免费直播| 99久久精品毛片免费播放| 久久久久亚洲精品日久生情| 成人免费无码大片a毛片| 又黄又大的激情视频在线观看免费视频社区在线 | 亚洲视频2020| 免费特级黄毛片在线成人观看| 精品在线免费视频| 亚洲国产精品久久久天堂| 性生交片免费无码看人| 免费国产黄网站在线观看动图| 亚洲国产精品无码久久久不卡| 99精品全国免费观看视频| 九一在线完整视频免费观看| 精品亚洲麻豆1区2区3区|