2015-08-09 54 views
2

在我正在寫(關於國際象棋)的android應用程序中,我在單例類中使用了位圖的LruCache。但是adb logcat似乎每次從一個活動切換到另一個時都會報告許多GC,兩個活動都會以較低的數量保存棋子圖像。 (或者當我離開/重新進入申請時呼叫GC)。用戶可能不得不經常在這些活動之間切換。GC是否會影響設備電池的顯着降低?

這是logcat的輸出:

08-09 11:20:26.161 1583-1583/? D/AndroidRuntime﹕ >>>>>>  AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<< 
08-09 11:20:26.161 1583-1583/? D/AndroidRuntime﹕ CheckJNI is ON 
08-09 11:20:26.244 1583-1583/? D/AndroidRuntime﹕ Calling main entry  com.android.commands.pm.Pm 
08-09 11:20:26.251  878-895/? W/ActivityManager﹕ No content  provider found for permission revoke:  file:///data/local/tmp/com.loloof64.android.chess_positions_archiver 
08-09 11:20:26.291  878-895/? W/ActivityManager﹕ No content  provider found for permission revoke:  file:///data/local/tmp/com.loloof64.android.chess_positions_archiver 
08-09 11:20:26.343  878-879/? D/dalvikvm﹕ GC_CONCURRENT freed  299K, 13% free 11370K/12935K, paused 1ms+1ms 
08-09 11:20:26.421  878-879/? D/dalvikvm﹕ GC_CONCURRENT freed  574K, 13% free 11378K/12935K, paused 1ms+2ms 
08-09 11:20:26.496  878-895/? I/PackageManager﹕ Removing non- system package:com.loloof64.android.chess_positions_archiver 
08-09 11:20:26.496  878-892/? I/ActivityManager﹕ Force stopping  package com.loloof64.android.chess_positions_archiver uid=10041 
08-09 11:20:26.581  878-879/? D/dalvikvm﹕ GC_CONCURRENT freed  415K, 12% free 11424K/12935K, paused 1ms+1ms 
08-09 11:20:26.581  878-895/? I/PackageManager﹕ Package  com.loloof64.android.chess_positions_archiver codePath changed from  /data/app/com.loloof64.android.chess_positions_archiver-1.apk to  /data/app/com.loloof64.android.chess_positions_archiver-2.apk; Retaining  data and using new 
08-09 11:20:26.581  878-895/? I/PackageManager﹕ Running dexopt on:  com.loloof64.android.chess_positions_archiver 
08-09 11:20:26.742 1595-1595/? D/dalvikvm﹕ DexOpt: load 11ms,  verify+opt 80ms 
08-09 11:20:26.751  878-892/? I/ActivityManager﹕ Force stopping  package com.loloof64.android.chess_positions_archiver uid=10041 
08-09 11:20:26.751  878-895/? W/PackageManager﹕ Code path for pkg  : com.loloof64.android.chess_positions_archiver changing from  /data/app/com.loloof64.android.chess_positions_archiver-1.apk to  /data/app/com.loloof64.android.chess_positions_archiver-2.apk 
08-09 11:20:26.751  878-895/? W/PackageManager﹕ Resource path for  pkg : com.loloof64.android.chess_positions_archiver changing from  /data/app/com.loloof64.android.chess_positions_archiver-1.apk to /data/app/com.loloof64.android.chess_positions_archiver-2.apk 
08-09 11:20:26.771  878-895/? D/PackageManager﹕ New package  installed in /data/app/com.loloof64.android.chess_positions_archiver-2.apk 
08-09 11:20:26.791  878-895/? I/ActivityManager﹕ Force stopping package com.loloof64.android.chess_positions_archiver uid=10041 
08-09 11:20:26.801  990-990/? D/dalvikvm﹕ GC_EXPLICIT freed 230K,  8% free 11366K/12295K, paused 1ms+5ms 
08-09 11:20:26.811 1025-1025/? D/dalvikvm﹕ GC_EXPLICIT freed 162K, 4% free 9374K/9735K, paused 1ms+1ms 
08-09 11:20:26.861 1113-1114/? D/dalvikvm﹕ GC_CONCURRENT freed 177K, 3% free 9298K/9543K, paused 2ms+1ms 
08-09 11:20:26.861 1113-1129/? I/AccountTypeManager﹕ Loaded meta-data for 1 account types, 0 accounts in 9ms(wall) 0ms(cpu) 
08-09 11:20:26.922 1113-1129/? I/AccountTypeManager﹕ Loaded meta-data for 1 account types, 0 accounts in 1ms(wall) 0ms(cpu) 
08-09 11:20:26.961  878-891/? D/dalvikvm﹕ GC_EXPLICIT freed 499K, 14% free 11235K/12935K, paused 1ms+1ms 
08-09 11:20:26.972  878-891/? D/PackageManager﹕ generateServicesMap(android.accounts.AccountAuthenticator): 2 services unchanged 
08-09 11:20:26.981  878-891/? D/PackageManager﹕ generateServicesMap(android.content.SyncAdapter): 4 services unchanged 
08-09 11:20:26.981  878-891/? D/BackupManagerService﹕ Received broadcast Intent { act=android.intent.action.PACKAGE_REMOVED dat=package:com.loloof64.android.chess_positions_archiver flg=0x10000010 (has extras) } 
08-09 11:20:26.981  878-891/? D/PackageManager﹕ generateServicesMap(android.accounts.AccountAuthenticator): 2 services unchanged 
08-09 11:20:26.981  878-891/? D/PackageManager﹕ generateServicesMap(android.content.SyncAdapter): 4 services unchanged 
08-09 11:20:26.991  878-891/? D/BackupManagerService﹕ Received broadcast Intent { act=android.intent.action.PACKAGE_ADDED dat=package:com.loloof64.android.chess_positions_archiver flg=0x10000010 (has extras) } 
08-09 11:20:26.991  878-891/? V/BackupManagerService﹕ updatePackageParticipantsLocked: #1 
08-09 11:20:27.022  878-891/? W/RecognitionManagerService﹕ no available voice recognition services found 
08-09 11:20:27.061  878-891/? D/BackupManagerService﹕ Received broadcast Intent { act=android.intent.action.PACKAGE_REPLACED dat=package:com.loloof64.android.chess_positions_archiver flg=0x10000010 (has extras) } 
08-09 11:20:27.061  878-891/? V/BackupManagerService﹕ updatePackageParticipantsLocked: #1 
08-09 11:20:27.092  878-895/? D/dalvikvm﹕ GC_EXPLICIT freed 413K, 13% free 11375K/12935K, paused 1ms+6ms 
08-09 11:20:27.128 1583-1583/? D/AndroidRuntime﹕ Shutting down VM 
08-09 11:20:27.128 1583-1588/? D/dalvikvm﹕ GC_CONCURRENT freed 96K, 79% free 441K/2048K, paused 0ms+0ms 
08-09 11:20:27.411 1604-1604/? D/AndroidRuntime﹕ >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<< 
08-09 11:20:27.411 1604-1604/? D/AndroidRuntime﹕ CheckJNI is ON 
08-09 11:20:27.461 1604-1604/? D/AndroidRuntime﹕ Calling main entry com.android.commands.am.Am 
08-09 11:20:27.471  878-886/? I/ActivityManager﹕ START {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.loloof64.android.chess_positions_archiver/.ChessPositionsArchiverActivity} from pid 1604 
08-09 11:20:27.471  878-886/? W/WindowManager﹕ Failure taking screenshot for (180x300) to layer 21005 
08-09 11:20:27.481 1604-1604/? D/AndroidRuntime﹕ Shutting down VM 
08-09 11:20:27.491 1604-1609/? D/dalvikvm﹕ GC_CONCURRENT freed 98K, 78% free 470K/2048K, paused 1ms+0ms 
08-09 11:20:27.491 1615-1615/? D/dalvikvm﹕ Not late-enabling CheckJNI (already on) 
08-09 11:20:27.491  878-962/? I/ActivityManager﹕ Start proc com.loloof64.android.chess_positions_archiver for activity com.loloof64.android.chess_positions_archiver/.ChessPositionsArchiverActivity: pid=1615 uid=10041 gids={} 
08-09 11:20:27.511  878-915/? W/NetworkManagementSocketTagger﹕ setKernelCountSet(10041, 1) failed with errno -2 
08-09 11:20:27.551  785-785/? D/dalvikvm﹕ GC_EXPLICIT freed 35K, 4% free 9038K/9347K, paused 1ms+0ms 
08-09 11:20:27.551  785-785/? D/dalvikvm﹕ GC_EXPLICIT freed <1K, 4% free 9038K/9347K, paused 0ms+1ms 
08-09 11:20:27.561  785-785/? D/dalvikvm﹕ GC_EXPLICIT freed <1K, 4% free 9038K/9347K, paused 1ms+1ms 
08-09 11:20:27.640 1615-1619/? D/dalvikvm﹕ GC_CONCURRENT freed 243K, 4% free 9237K/9607K, paused 1ms+1ms 
08-09 11:20:27.711 1615-1615/? D/dalvikvm﹕ GREF has increased to 201 
08-09 11:20:27.774 1615-1619/? D/dalvikvm﹕ GC_CONCURRENT freed 367K, 6% free 9304K/9799K, paused 1ms+1ms 
08-09 11:20:27.861 1615-1615/? I/ChessPositionsArchiver﹕ Application positions directory already present 
08-09 11:20:27.891 1615-1619/? D/dalvikvm﹕ GC_CONCURRENT freed 398K, 6% free 9338K/9863K, paused 1ms+1ms 
08-09 11:20:28.051  878-891/? I/Process﹕ Sending signal. PID: 1615 SIG: 3 
08-09 11:20:28.051 1615-1620/? I/dalvikvm﹕ threadid=3: reacting to signal 3 
08-09 11:20:28.051 1615-1620/? I/dalvikvm﹕ Wrote stack traces to '/data/anr/traces.txt' 
08-09 11:20:28.111 1615-1615/? D/gralloc_goldfish﹕ Emulator without GPU emulation detected. 
08-09 11:20:28.121  878-905/? I/ActivityManager﹕ Displayed com.loloof64.android.chess_positions_archiver/.ChessPositionsArchiverActivity: +657ms 
08-09 11:20:28.141  878-915/? W/NetworkManagementSocketTagger﹕ setKernelCountSet(10004, 0) failed with errno -2 
08-09 11:20:38.051 1615-1615/? D/dalvikvm﹕ GC_FOR_ALLOC freed 154K, 4% free 9554K/9927K, paused 3ms 
08-09 11:20:38.061 1615-1615/? D/dalvikvm﹕ GC_FOR_ALLOC freed 52K, 4% free 9828K/10183K, paused 3ms 
08-09 11:20:45.862  878-886/? I/ActivityManager﹕ START {cmp=com.loloof64.android.chess_positions_archiver/.PositionEditorActivity (has extras)} from pid 1615 
08-09 11:20:45.862  878-886/? W/WindowManager﹕ Failure taking screenshot for (180x300) to layer 21015 
08-09 11:20:45.891 1615-1619/? D/dalvikvm﹕ GC_CONCURRENT freed 451K, 6% free 9865K/10439K, paused 0ms+1ms 
08-09 11:20:45.941  878-905/? I/ActivityManager﹕ Displayed com.loloof64.android.chess_positions_archiver/.PositionEditorActivity: +74ms 
08-09 11:21:00.651  878-885/? W/WindowManager﹕ Failure taking screenshot for (180x300) to layer 21015 
08-09 11:21:02.571 1615-1615/? D/dalvikvm﹕ GC_FOR_ALLOC freed 132K, 4% free 10111K/10439K, paused 4ms 
08-09 11:21:14.021  878-1018/? W/InputManagerService﹕ Window already focused, ignoring focus gain of: [email protected] 
08-09 11:21:19.231  878-1051/? I/ActivityManager﹕ START {cmp=com.loloof64.android.chess_positions_archiver/.PositionEditorActivity (has extras)} from pid 1615 
08-09 11:21:19.231  878-1051/? W/WindowManager﹕ Failure taking screenshot for (180x300) to layer 21015 
08-09 11:21:19.252 1615-1619/? D/dalvikvm﹕ GC_CONCURRENT freed 591K, 7% free 9927K/10631K, paused 0ms+0ms 
08-09 11:21:19.292  878-905/? I/ActivityManager﹕ Displayed com.loloof64.android.chess_positions_archiver/.PositionEditorActivity: +65ms 
08-09 11:21:44.382  878-885/? W/WindowManager﹕ Failure taking screenshot for (180x300) to layer 21015 
08-09 11:22:08.213 1615-1619/? D/dalvikvm﹕ GC_CONCURRENT freed 107K, 4% free 10210K/10631K, paused 1ms+5ms 
08-09 11:22:14.974  878-1050/? I/ActivityManager﹕ START {cmp=com.loloof64.android.chess_positions_archiver/.PositionEditorActivity (has extras)} from pid 1615 
08-09 11:22:14.974  878-1050/? W/WindowManager﹕ Failure taking screenshot for (180x300) to layer 21015 
08-09 11:22:15.053  878-905/? I/ActivityManager﹕ Displayed com.loloof64.android.chess_positions_archiver/.PositionEditorActivity: +70ms 
08-09 11:22:24.142  878-1049/? W/WindowManager﹕ Failure taking screenshot for (180x300) to layer 21015 
08-09 11:22:31.112  878-1048/? I/ActivityManager﹕ START {cmp=com.loloof64.android.chess_positions_archiver/.PositionEditorActivity (has extras)} from pid 1615 
08-09 11:22:31.112  878-1048/? W/WindowManager﹕ Failure taking screenshot for (180x300) to layer 21015 
08-09 11:22:31.142 1615-1619/? D/dalvikvm﹕ GC_CONCURRENT freed 632K, 8% free 9999K/10759K, paused 1ms+0ms 
08-09 11:22:31.203  878-905/? I/ActivityManager﹕ Displayed com.loloof64.android.chess_positions_archiver/.PositionEditorActivity: +85ms 
08-09 11:22:31.203  878-879/? D/dalvikvm﹕ GC_CONCURRENT freed 503K, 13% free 11336K/12935K, paused 1ms+0ms 
08-09 11:22:38.042  878-886/? W/WindowManager﹕ Failure taking screenshot for (180x300) to layer 21015 

所以我必須擔心用戶電池的性能,有這麼多的GC電話?或者這不是很糟糕,所以我可以把它留下來嗎?

順便說一下,這條線的確切含義是什麼?

GC_CONCURRENT freed 402K, 6% free 9529K/10055K, paused 1ms+1ms 

是什麼意思是,這6%的自由(這是免費的剩餘GC之前的記憶?) 如何解釋暫停時間(毫秒+ 1毫秒)?

回答

1

GC 昂貴的操作,然後我認爲你應該關心那些許多日誌消息。

查看Managing Bitmap memory查看Android的提示。

另請參閱this answer瞭解GC日誌消息。

GC_FOR_MALLOC意味着GC被觸發,因爲堆中沒有足夠的內存來執行分配。可能會在創建新對象時觸發。

GC_EXPLICIT表示垃圾收集器已被明確要求收集,而不是由堆中的高水位標記觸發。發生在所有地方,但最有可能的情況是當一個線程被殺死或綁定器通信被取消時。

有一些其他人也:

GC_CONCURRENT當堆已經達到了一定量的對象來收集觸發。

GC_EXTERNAL_ALLOC表示虛擬機試圖減少用於可收集對象的內存量,爲更多不可收集的空間騰出空間。

更新:在更高版本的Android中出現了第一個事件的名稱更改。現在稱爲「GC_FOR_ALLOC」。還有一個新事件可用,儘管在現代手機中非常罕見:GC_BEFORE_OOM表示系統運行內存非常低,並且執行了最終的GC,以避免調用低內存殺手。

+0

謝謝你的完整答案。我正面臨着這個問題,雖然我已經在使用來自您給予我的鏈接的頁面的提示:LruCache和AsyncTask。這個問題可能很難解決...也許這是因爲我使用的Svg圖像在不同尺寸下具有更好的渲染效果,但在Android上並不那麼標準,而且更難以使用。 – loloof64

+0

最後還從Google找到了一個解釋:https://developer.android.com/intl/es/tools/debugging/debugging-memory.html – loloof64

相關問題