導航:首頁 > 操作系統 > android引用系統資源

android引用系統資源

發布時間:2022-09-07 05:04:32

1. 如何為android系統添加一個新的資源包

如何為Android系統添加一個新的資源包 傳統的Android系統只有一個framework-res.apk資源包,第三方廠商在進行rom定製時會直接修改framework res資源,達到美化目的。但是這種方式跟原生資源的耦合度過高,在系統遷移或者framework ui移植時需要進行人工merge,工作量巨大。通過為Android添加一個新的獨立的資源包,可以將廠商定製資源獨立出來,可移植、可維護性非常好。 具體做法可以分為以下幾個步驟: 1. 修改build/core/clear_var.mk LOCAL_USE_LETV_FRAMEWORK_RES:= true 2. 修改build/core/package.mk 以下腳本可以加在 $(R_file_stamp): $(framework_res_package_export_deps) 之前,然後修改$(R_file_stamp): $(framework_res_package_export_deps) 和 $(LOCAL_INTERMEDIATE_TARGETS): \ PRIVATE_AAPT_INCLUDES := $(framework_res_package_export) 如下所示: view sourceprint? 1 ifeq ($(LOCAL_USE_LETV_FRAMEWORK_RES),true) 2 letv_framework_res_package_export := \ 3 $(call intermediates-dir-for,APPS,letv-framework-res,,COMMON)/package-export.apk 4 letv_framework_res_package_export_deps := \ 5 $(dir $(letv_framework_res_package_export))src/R.stamp 6 else 7 letv_framework_res_package_export := 8 letv_framework_res_package_export_deps := 9 endif # LOCAL_USE_LETV_FRAMEWORK_RES view sourceprint? 1 $(R_file_stamp): $(framework_res_package_export_deps) $(letv_framework_res_package_export_deps) 2 $(LOCAL_INTERMEDIATE_TARGETS): \ 3 PRIVATE_AAPT_INCLUDES := $(framework_res_package_export) \ 4 $(letv_framework_res_package_export) 5 endif # LOCAL_NO_STANDARD_LIBRARIES 3. 修改build/target/proct/core.mk 在PRODUCT_PACKAGES增加letv-framework-res 4. 添加一個新的資源包項目,這里在framework/base/core/res同級目錄下建立一個新的文件夾letv_res用來存放我們的資源。把res目錄下的AndroidManifest.xml和Android.mk拷貝過來,進行修改。 記得設置LOCAL_USE_MY_FRAMEWORK_RES為false。 view sourceprint? 01 LOCAL_PATH:= $(call my-dir) 02 include $(CLEAR_VARS) 03 04 LOCAL_MODULE_TAGS := optional 05 06 LOCAL_PACKAGE_NAME := letv-framework-res 07 LOCAL_CERTIFICATE := platform 08 09 # Set LOCAL_USE_LETV_FRAMEWORK_RES as false 10 LOCAL_USE_LETV_FRAMEWORK_RES := false 11 12 # Tell aapt to create "extending (non-application)" resource IDs, 13 # since these resources will be used by many apps. 14 LOCAL_AAPT_FLAGS := -x 15 16 # Install this alongside the libraries. 17 LOCAL_MODULE_PATH := $(TARGET_OUT_java_LIBRARIES) 18 19 # Create package-export.apk, which other packages can use to get 20 # PRODUCT-agnostic resource data like IDs and type definitions. 21 LOCAL_EXPORT_PACKAGE_RESOURCES := true 22 23 # Include resources generated by system RenderScript files. 24 framework_GENERATED_SOURCE_DIR := $(call intermediates-dir-for,JAVA_LIBRARIES,framework,,COMMON)/src 25 framework_RenderScript_STAMP_FILE := $(framework_GENERATED_SOURCE_DIR)/RenderScript.stamp 26 #LOCAL_RESOURCE_DIR := $(framework_GENERATED_SOURCE_DIR)/renderscript/res $(LOCAL_PATH)/res 27 28 include $(BUILD_PACKAGE) 29 30 # Make sure the system .rs files get compiled before building the package-export.apk. 31 #$(resource_export_package): $(framework_RenderScript_STAMP_FILE) 32 33 # define a global intermediate target that other mole may depend on. 34 .PHONY: letv-framework-res-package-target 35 letv-framework-res-package-target: $(LOCAL_BUILT_MODULE) view sourceprint? 01 <?xml version="1.0" encoding="utf-8"?> 02 <manifest xmlns:android="" 03 package="letv" coreApp="true" android:sharedUserId="android.uid.system" 04 android:sharedUserLabel="@null"> 05 06 <application android:process="system" 07 android:persistent="true" 08 android:hasCode="false" 09 android:label="@null" 10 android:allowClearUserData="false" 11 android:killAfterRestore="false" 12 android:icon="@null"> 13 14 </application> 15 16 </manifest> 資源的放置跟res下的類似,記得values目錄下創建public.xml,public.xml對id的類型區分比較嚴格,attr必須是0x0x010000開頭,drawable必須是0x0x020000開頭,其他類型好像就沒有限制,直接依次0x0x030000、0x0x040000開始即可。否則,編譯過程中會出現segmentation fault錯誤。 view sourceprint? 1 <resources> 2 <public type="attr" name="cForeground" id="0x03010000" /> 3 <public type="drawable" name="ic_filemanager" id="0x03020000" /> 4 <public type="style" name="LetvTheme" id="0x03030000" /> 5 <public type="string" name="letv" id="0x03040000" /> 6 <public type="dimen" name="letv_width" id="0x03050000" /> 7 <public type="layout" name="letv_text" id="0x03060000" /> 8 </resources> 5. 以上只是解決了資源的編譯環境問題,資源的查找過程也需要進行修改,修改 AssetManager.java,在init()後添加代碼 addAssetPath("/system/framework/letv-framework-res.apk"); view sourceprint? 01 public AssetManager() { 02 synchronized (this) { 03 if (DEBUG_REFS) { 04 mNumRefs = 0; 05 incRefsLocked(this.hashCode()); 06 } 07 init(); 08 addAssetPath("/system/framework/letv-framework-res.apk"); 09 if (localLOGV) Log.v(TAG, "New asset manager: " + this); 10 ensureSystemAssets(); 11 } 12 } 6. 最後就是資源應用問題。應用程序在xml文件中引用letv-framework-res.apk中的資源時可以使用與原生資源類似的訪問方式,首先聲明letv xmlns : view sourceprint? 1 xmlns:letv="" 然後像@android:drawable @android:dimen這種引用方式改成@letv:drawable @letv:dimen即可。 view sourceprint? 01 <?xml version="1.0" encoding="utf-8"?> 02 <LinearLayout 03 xmlns:android="" 04 xmlns:letv="" 05 android:layout_width="fill_parent" 06 android:layout_height="wrap_content" 07 android:gravity="center" 08 android:paddingTop="@letv:dimen/letv_width" 09 android:orientation="horizontal" > 10 11 <ImageView android:id="@+id/file_icon" 12 android:layout_width="wrap_content" 13 android:layout_height="wrap_content" 14 android:layout_gravity="center" 15 android:layout_marginBottom="40dp" 16 android:src="@letv:drawable/ic_filemanager" /> 17 18 </LinearLayout> 轉載,僅供參考。

2. android怎麼調用系統服務

1、Started
Started的Service,通過在Application里用startService(Intent intent)方法來啟動。這種類型的Service一經啟動,會在後面無休止地運行,即使啟動它的Activity被Destroy掉。要停止此類型的Service,可在Service中調用stopSelf()或在Application中調用stopService(Intent intent),要不然就只能等Android系統在系統資源緊張的時候把它殺掉。

2、Bound

Bound的Service,通過在Application里調用bindService()方法來啟動。該類型的Service與Application綁定在一起,一旦綁定的所有Application消失了,Android會Detroy掉該Service。也可以主動調用unbindService()方法來解綁Service。

有時候我們想在Activity中獲知Service的狀態,例如一個音樂播放器,Service負責音樂播放,Activity負責顯示當前歌曲名和播放進度。
可以用Broadcast,這個也不失為一個解決方法。
但如果可以獲取Service實例,那麼就可以調用Service中自定義的一些方法來獲取Service狀態了。
首先要明確的是,第一種類型的Service是無能為力的。因為Activity與Service之間並沒有相關聯的介面,即使這個Service是在Activity里start的,一旦start,兩者不再有關聯。

3. android drawable importer怎麼使用

一.@代表引用資源
1.引用自定義資源。格式:@[package:]type/name
android:text="@string/hello"

2.引用系統資源。格式:@android:type/name
android:textColor="@android:color/opaque_red"
注意:其實@android:type/name是@[package:]type/name 的一個子類
二.@*代表引用系統的非public資源。格式:@*android:type/name
系統資源定義分public和非public。public的聲明在:
<sdk_path>\platforms\android-8\data\res\values\public.xml
@*android:type/name:可以調用系統定義的所有資源
@android:type/name:只能夠調用publi屬性的資源。
注意:沒在public.xml中聲明的資源是google不推薦使用的。
三.?代表引用主題屬性
另外一種資源值允許你引用當前主題中的屬性的值。這個屬性值只能在style資源和XML屬性中使用;它允許你通過將它們改變為當前主題提供的標准變化來改變UI元素的外觀,而不是提供具體的值。例如:
android:textColor="?android:textDisabledColor"
注意,這和資源引用非常類似,除了我們使用一個"?"前綴代替了"@"。當你使用這個標記時,你就提供了屬性資源的名稱,它將會在主題中被查找,所以你不需要顯示聲明這個類型(如果聲明,其形式就是?android:attr/android:textDisabledColor)。除了使用這個資源的標識符來查詢主題中的值代替原始的資源,其命名語法和"@"形式一致:?[namespace:]type/name,這里類型可選。
四.@+代表在創建或引用資源 。格式:@+type/name
含義:」+」表示在R.java中名為type的內部類中添加一條記錄。如"@+id/button"的含義是在R.java 文件中的id 這個靜態內部類添加一條常量名為button。該常量就是該資源的標識符。如果標示符(包括系統資源)已經存在則表示引用該標示符。最常用的就是在定義資源ID中,例如:
@+id/資源ID名 新建一個資源ID
@id/資源ID名 應用現有已定義的資源ID,包括系統ID
@android:id/資源ID名 引用系統ID,其等效於@id/資源ID名

android:id="@+id/selectdlg"
android:id="@android:id/text1"
android:id="@id/button3"

4. android 無法引用到系統內部資源文件 求助

有個簡單的解決辦法,在res中建立drawable的文件夾,把你需要的那張圖片放在這裡面,命名為dialog_holo_dark_frame,再重新編譯

5. 如何為android系統添加一個新的資源包

具體做法可以分為以下幾個步驟:

1. 修改build/core/clear_var.mk

LOCAL_USE_LETV_FRAMEWORK_RES:= true

2. 修改build/core/package.mk

以下腳本可以加在 $(R_file_stamp): $(framework_res_package_export_deps) 之前,然後修改$(R_file_stamp): $(framework_res_package_export_deps) 和 $(LOCAL_INTERMEDIATE_TARGETS): \
PRIVATE_AAPT_INCLUDES := $(framework_res_package_export)

如下所示:

view sourceprint?
1 ifeq ($(LOCAL_USE_LETV_FRAMEWORK_RES),true)

2 letv_framework_res_package_export := \

3 $(call intermediates-dir-for,APPS,letv-framework-res,,COMMON)/package-export.apk

4 letv_framework_res_package_export_deps := \

5 $(dir $(letv_framework_res_package_export))src/R.stamp

6 else

7 letv_framework_res_package_export :=

8 letv_framework_res_package_export_deps :=

9 endif # LOCAL_USE_LETV_FRAMEWORK_RES
view sourceprint?
1 $(R_file_stamp): $(framework_res_package_export_deps) $(letv_framework_res_package_export_deps)

2 $(LOCAL_INTERMEDIATE_TARGETS): \

3 PRIVATE_AAPT_INCLUDES := $(framework_res_package_export) \

4 $(letv_framework_res_package_export)

5 endif # LOCAL_NO_STANDARD_LIBRARIES
3. 修改build/target/proct/core.mk

在PRODUCT_PACKAGES增加letv-framework-res

4. 添加一個新的資源包項目,這里在framework/base/core/res同級目錄下建立一個新的文件夾letv_res用來存放咱們的資源。把res目錄下的AndroidManifest.xml和Android.mk拷貝過來,進行修改。

記得設置LOCAL_USE_MY_FRAMEWORK_RES為false。

view sourceprint?
01 LOCAL_PATH:= $(call my-dir)

02 include $(CLEAR_VARS)

03

04 LOCAL_MODULE_TAGS := optional

05

06 LOCAL_PACKAGE_NAME := letv-framework-res

07 LOCAL_CERTIFICATE := platform

08

09 # Set LOCAL_USE_LETV_FRAMEWORK_RES as false

10 LOCAL_USE_LETV_FRAMEWORK_RES := false

11

12 # Tell aapt to create "extending (non-application)" resource IDs,

13 # since these resources will be used by many apps.

14 LOCAL_AAPT_FLAGS := -x

15

16 # Install this alongside the libraries.

17 LOCAL_MODULE_PATH := $(TARGET_OUT_JAVA_LIBRARIES)

18

19 # Create package-export.apk, which other packages can use to get

20 # PRODUCT-agnostic resource data like IDs and type definitions.

21 LOCAL_EXPORT_PACKAGE_RESOURCES := true

22

23 # Include resources generated by system RenderScript files.

24 framework_GENERATED_SOURCE_DIR := $(call intermediates-dir-for,JAVA_LIBRARIES,framework,,COMMON)/src

25 framework_RenderScript_STAMP_FILE := $(framework_GENERATED_SOURCE_DIR)/RenderScript.stamp

26 #LOCAL_RESOURCE_DIR := $(framework_GENERATED_SOURCE_DIR)/renderscript/res $(LOCAL_PATH)/res

27

28 include $(BUILD_PACKAGE)

29

30 # Make sure the system .rs files get compiled before building the package-export.apk.

31 #$(resource_export_package): $(framework_RenderScript_STAMP_FILE)

32

33 # define a global intermediate target that other mole may depend on.

34 .PHONY: letv-framework-res-package-target

35 letv-framework-res-package-target: $(LOCAL_BUILT_MODULE)

view sourceprint?
01 <?xml version="1.0" encoding="utf-8"?>

02 <manifest xmlns:android=""

03 package="letv" coreApp="true" android:sharedUserId="android.uid.system"

04 android:sharedUserLabel="@null">

05

06 <application android:process="system"

07 android:persistent="true"

08 android:hasCode="false"

09 android:label="@null"

10 android:allowClearUserData="false"

11 android:killAfterRestore="false"

12 android:icon="@null">

13

14 </application>

15

16 </manifest>

資源的放置跟res下的類似,記得values目錄下創建public.xml,public.xml對id的類型區分比較嚴格,attr必須是0x0x010000開頭,drawable必須是0x0x020000開頭,其他類型好像就沒有限制,直接依次0x0x030000、0x0x040000開始即可。否則,編譯過程中會出現segmentation fault錯誤。

view sourceprint?
1 <resources>

2 <public type="attr" name="cForeground" id="0x03010000" />

3 <public type="drawable" name="ic_filemanager" id="0x03020000" />

4 <public type="style" name="LetvTheme" id="0x03030000" />

5 <public type="string" name="letv" id="0x03040000" />

6 <public type="dimen" name="letv_width" id="0x03050000" />

7 <public type="layout" name="letv_text" id="0x03060000" />

8 </resources>
5. 以上只是解決了資源的編譯環境問題,資源的查找過程也需要進行修改,修改 AssetManager.java,在init()後添加代碼 addAssetPath("/system/framework/letv-framework-res.apk");
view sourceprint?
01 public AssetManager() {

02 synchronized (this) {

03 if (DEBUG_REFS) {

04 mNumRefs = 0;

05 incRefsLocked(this.hashCode());

06 }

07 init();

08 addAssetPath("/system/framework/letv-framework-res.apk");

09 if (localLOGV) Log.v(TAG, "New asset manager: " + this);

10 ensureSystemAssets();

11 }

12 }

6. 最後就是資源應用問題。應用程序在xml文件中引用letv-framework-res.apk中的資源時可以使用與原生資源類似的訪問方式,首先聲明letv xmlns :

view sourceprint?
1 xmlns:letv=""
然後像@android:drawable @android:dimen這種引用方式改成@letv:drawable @letv:dimen即可。

view sourceprint?
01 <?xml version="1.0" encoding="utf-8"?>

02 <LinearLayout

03 xmlns:android=""

04 xmlns:letv=""

05 android:layout_width="fill_parent"

06 android:layout_height="wrap_content"

07 android:gravity="center"

08 android:paddingTop="@letv:dimen/letv_width"

09 android:orientation="horizontal" >

10

11 <ImageView android:id="@+id/file_icon"

12 android:layout_width="wrap_content"

13 android:layout_height="wrap_content"

14 android:layout_gravity="center"

15 android:layout_marginBottom="40dp"

16 android:src="@letv:drawable/ic_filemanager" />

17

18 </LinearLayout>

6. android與@android的區別是什麼

不一樣,但效果可能一樣。 android開發者中有相關說明(Referencing style attributes). @android引用系統資源, ?android 引用本應用theme內的資源。在自定義theme時, 一些未自定義的預設的屬性則相當於引用系統資源

7. 如何讓Android應用一直活著,確保佔用系統資源

java中的內存溢出和內存泄漏 內存溢出: 對於整個應用程序來說,JVM內存空間,已經沒有多餘的空間分配給新的對象。所以就發生內存溢出。 內存泄露: 在應用的整個生命周期內,某個對象一直存在,且對象佔用的內存空間越來越大,最終導致JVM內存泄露, 比如:緩存的應用,如果不設置上限的話,緩存的容量可能會一直增長。 靜態集合引用,如果該集合存放了無數個對象,隨著時間的推移也有可能使容量無限制的增長,最終導致JVM內存泄露。 內存泄露,是應用程序中的某個對象長時間的存活,並且佔用空間不斷增長,最終導致內存泄露。 是對象分配後,長時間的容量增長。 內存溢出,是針對整個應用程序的所有對象的分配空間不足,會造成內存溢出。 內存泄漏 內存泄漏指由於疏忽或錯誤造成程序未能釋放已經不再使用的內存的情況。內存泄漏並非指內存在物理上的消失,而是應用程序分配某段內存後,由於設 計錯誤,失去了對該段內存的控制,因而造成了內存的浪費。內存泄漏與許多其他問題有著相似的症狀,並且通常情況下只能由那些可以獲得程序源代碼的程序員才 可以分析出來。然而,有不少人習慣於把任何不需要的內存使用的增加描述為內存泄漏,即使嚴格意義上來說這是不準確的。 一般我們常說的內存泄漏 是指堆內存的泄漏。堆內存是指程序從堆中分配的,大小任意的(內存塊的大小可以在程序運行期決定),使用完後必須顯示釋放的內存。應用程序一般使用 malloc,realloc,new等函數從堆中分配到一塊內存,使用完後,程序必須負責相應的調用free或delete釋放該內存塊,否則,這塊內 存就不能被再次使用,我們就說這塊內存泄漏了。 內存泄漏可以分為4類: 1. 常發性內存泄漏。發生內存泄漏的代碼會被多次執行到,每次被執行的時候都會導致一塊內存泄漏。 2. 偶發性內存泄漏。發生內存泄漏的代碼只有在某些特定環境或操作過程下才會發生。常發性和偶發性是相對的。對於特定的環境,偶發性的也許就變成了常發性的。所以測試環境和測試方法對檢測內存泄漏至關重要。 3. 一次性內存泄漏。發生內存泄漏的代碼只會被執行一次,或者由於演算法上的缺陷,導致總會有一塊僅且一塊內存發生泄漏。比如,在類的構造函數中分配內存,在析構函數中卻沒有釋放該內存,所以內存泄漏只會發生一次。 4. 隱式內存泄漏。程序在運行過程中不停的分配內存,但是直到結束的時候才釋放內存。嚴格的說這里並沒有發生內存泄漏,因為最終程序釋放了所有申請的內存。但 是對於一個伺服器程序,需要運行幾天,幾周甚至幾個月,不及時釋放內存也可能導致最終耗盡系統的所有內存。所以,我們稱這類內存泄漏為隱式內存泄漏。 簡單點: 內存泄漏就是忘記釋放使用完畢的內存,讓下次使用有一定風險。 內存溢出就是一定的內存空間不能裝下所有的需要存放的數據,造成內存數據溢出。 主要從以下幾部分來說明,關於內存和內存泄露、溢出的概念,區分內存泄露和內存溢出;內存的區域劃分,了解GC回收機制;重點關注如何去監控和發現內存問題;此外分析出問題還要如何解決內存問題。 下面就開始本篇的內容: 第一部分 概念 眾所周知,java中的內存由java虛擬機自己去管理的,他不像C++需要自己去釋放。籠統地 去講,java的內存分配分為兩個部分,一個是數據堆,一個是棧。程序在運行的時候一般分配數據堆,把局部的臨時的變數都放進去,生命周期和進程有關系。 但是如果程序員聲明了static的變數,就直接在棧中運行的,進程銷毀了,不一定會銷毀static變數。 另外為了保證java內存不會溢出,java中有垃圾回收機制。 System.gc()即垃圾收集機制是指jvm用於釋放那些不再使用的對象所佔用的內存。java語言並不要求jvm有gc,也沒有規定gc如何工作。垃圾收集的目的在於清除不再使用的對象。gc通過確定對象是否被活動對象引用來確定是否收集該對象。 而其中,內存溢出就是你要求分配的java虛擬機內存超出了系統能給你的,系統不能滿足需求,於是產生溢出。 內存泄漏是指你向系統申請分配內存進行使用(new),可是使用完了以後卻不歸還(delete),結果你申請到的那塊內存你自己也不能再訪 問,該塊已分配出來的內存也無法再使用,隨著伺服器內存的不斷消耗,而無法使用的內存越來越多,系統也不能再次將它分配給需要的程序,產生泄露。一直下 去,程序也逐漸無內存使用,就會溢出。 第二部分 原理 JAVA垃圾回收及對內存區劃分 在Java虛擬機規范中,提及了如下幾種類型的內存空間: ◇ 棧內存(Stack):每個線程私有的。 ◇ 堆內存(Heap):所有線程公用的。 ◇ 方法區(Method Area):有點像以前常說的「進程代碼段」,這裡面存放了每個載入類的反射信息、類函數的代碼、編譯時常量等信息。 ◇ 原生方法棧(Native Method Stack):主要用於JNI中的原生代碼,平時很少涉及。 而Java的使用的是堆內存,java堆是一個運行時數據區,類的實例(對象)從中分配空間。Java虛擬機(JVM)的堆中儲存著正在運行的應用程序所建立的所有對象,「垃圾回收」也是主要是和堆內存(Heap)有關。 垃圾回收的概念就是JAVA虛擬機(JVM)回收那些不再被引用的對象內存的過程。一般我們認為正在被引用的對象狀態為「alive」,而沒有 被應用或者取不到引用屬性的對象狀態為「dead」。垃圾回收是一個釋放處於」dead」狀態的對象的內存的過程。而垃圾回收的規則和演算法被動態的作用於 應用運行當中,自動回收。 JVM的垃圾回收器採用的是一種分代(generational )回收策略,用較高的頻率對年輕的對象(young generation)進行掃描和回收,這種叫做minor collection,而對老對象(old generation)的檢查回收頻率要低很多,稱為major collection。這樣就不需要每次GC都將內存中所有對象都檢查一遍,這種策略有利於實時觀察和回收。 (Sun JVM 1.3 有兩種最基本的內存收集方式:一種稱為ing或scavenge,將所有仍然生存的對象搬到另外一塊內存後,整塊內存就可回收。這種方法有效率,但需要有一定的空閑內存,拷貝也有開銷。這種方法用於minor collection。另外一種稱為mark-compact,將活著的對象標記出來,然後搬遷到一起連成大塊的內存,其他內存就可以回收了。這種方法不需要佔用額外的空間,但速度相對慢一些。這種方法用於major collection. ) 一些對象被創建出來只是擁有短暫的生命周期,比如 iterators 和本地變數。另外一些對象被創建是擁有很長的生命周期,比如持久化對象等。 垃圾回收器的分代策略是把內存區劃分為幾個代,然後為每個代分配一到多個內存區塊。當其中一個代用完了分配給他的內存後,JVM會在分配的內存區內執行一個局部的GC(也可以叫minor collection)操作,為了回收處於「dead」狀態的對象所佔用的內存。局部GC通常要比Full GC快很多。 JVM定義了兩個代,年輕代(yong generation)(有時稱為「nursery」托兒所)和老年代(old generation)。年輕代包括 「Eden space(伊甸園)」和兩個「survivor spaces」。虛擬內存初始化的時候會把所有對象都分配到 Eden space,並且大部分對象也會在該區域被釋放。 當進行 minor GC的時候,VM會把剩下的沒有釋放的對象從Eden space移動到其中一個survivor spaces當中。此外,VM也會把那些長期存活在survivor spaces 里的對象移動到 老生代的「tenured」 space中。當 tenured generation 被填滿後,就會產生Full GC,Full GC會相對比較慢因為回收的內容包括了所有的 live狀態的對象。pemanet generation這個代包括了所有java虛擬機自身使用的相對比較穩定的數據對象,比如類和對象方法等。 關於代的劃分,可以從下圖中獲得一個概況: 第三部分 總結 內存溢出主要是由於代碼編寫時對某些方法、類應用不合理,或者沒有預估到臨時對象會佔用很大內存量,或者把過多的數據放入JVM緩存,或者性能 壓力大導致消息堆積而佔用內存,以至於在性能測試時,生成龐大數量的臨時對象,GC時沒有做出有效回收甚至根本就不能回收,造成內存空間不足,內存溢出。 如果編碼之前,對內存使用量進行預估,對放在內存中的數據進行評估,保證有用的信息盡快釋放,無用的信息能夠被GC回收,這樣在一定程度上是可以避免內存溢出問題的。

8. 如何引用安卓的資源文件

  1. res/drawable 專門存放png、jpgÉ圖標文件。在代碼中使用getResources().getDrawable(resourceId)獲取該目錄下的資源。

  2. res/values 專門存放應用使用到的各種類型數據。不同類型的數據存放在不同的文件中。

  1. 具體格式為:

    R.資源文件類型.資源文件名稱,除了訪問用戶自定義的資源文件,還可以訪問系統中的資源文件。

  2. 訪問系統中的資源文件的格式為:

    android.R. 資源文件類型.資源文件名稱。

閱讀全文

與android引用系統資源相關的資料

熱點內容
橙app如何開啟聊天 瀏覽:895
訪問伺服器公網地址 瀏覽:656
pdf列印底色去掉 瀏覽:463
java快遞介面 瀏覽:397
哪個app可以教新爸爸 瀏覽:210
如何查看伺服器系統版本信息 瀏覽:524
成都市土地出讓金演算法 瀏覽:702
鋼筋加密標記 瀏覽:576
ps中擴展功能在文件夾的什麼位置 瀏覽:904
雙極壓縮機為什麼要先高壓 瀏覽:527
蘋果手機伺服器填什麼 瀏覽:832
android移動動畫效果 瀏覽:691
電子和伺服器是什麼意思 瀏覽:691
phpurl中文亂碼問題 瀏覽:893
程序員那麼可愛大結局陸漓產子 瀏覽:538
java如何從雲伺服器讀取本地文件 瀏覽:924
壓縮空氣軟管製作方法 瀏覽:912
天河三號演算法 瀏覽:924
php隊列教程 瀏覽:632
洪水命令 瀏覽:531