Visualizzazione stampabile
-
Gc_for_malloc
Salve , sto sviluppando un'applicazione che prevede la gestione d immagini che si muovo, e interagiscono tra loro, sono presenti tre classi, e un thread che di volta in volta disegna gli oggetti che si spostano. In pratica dopo una decian di secondi che l'applicazione gira , spariscono gli oggetti, e poi si interrompe.
Dai log compare un problema nella memoria che termina.
La mia domanda è , può bastare un solo synchronized, invocato nell'unico thread che gira, o va utilizzato prima di ogni metodo? "ad esempio all'interno del onDraw ogni volta che viene invocato".
Segue il log:
03-31 11:05:00.102: DEBUG/dalvikvm(580): GC_EXPLICIT freed 786 objects / 38272 bytes in 1533ms
03-31 11:05:15.562: INFO/ActivityManager(59): Process com.android.launcher (pid 580) has died.
03-31 11:05:15.562: INFO/WindowManager(59): WIN DEATH: Window{43fc0f78 com.android.launcher/com.android.launcher2.Launcher paused=false}
03-31 11:05:15.601: INFO/ActivityManager(59): Low Memory: No more background processes.
03-31 11:05:20.823: DEBUG/dalvikvm(120): GC_EXPLICIT freed 222 objects / 9856 bytes in 203ms
03-31 11:05:24.441: INFO/ActivityManager(59): Process jp.co.omronsoft.openwnn (pid 579) has died.
03-31 11:05:24.471: WARN/ActivityManager(59): Scheduling restart of crashed service jp.co.omronsoft.openwnn/.OpenWnnJAJP in 5000ms
03-31 11:05:24.471: INFO/ActivityManager(59): Low Memory: No more background processes.
03-31 11:05:28.421: INFO/WindowManager(59): WIN DEATH: Window{43fbf378 SurfaceView paused=false}
03-31 11:05:28.452: INFO/ActivityManager(59): Process andrea.lax.soccer (pid 610) has died.
03-31 11:05:28.483: INFO/WindowManager(59): WIN DEATH: Window{43f828b0 andrea.lax.soccer/andrea.lax.soccer.soccer paused=false}
03-31 11:05:28.603: INFO/ActivityManager(59): Start proc com.android.launcher for activity com.android.launcher/com.android.launcher2.Launcher: pid=620 uid=10025 gids={}
03-31 11:05:28.603: INFO/ActivityManager(59): Low Memory: No more background processes.
03-31 11:05:29.012: INFO/UsageStats(59): Unexpected resume of com.android.launcher while already resumed in andrea.lax.soccer
03-31 11:05:29.163: INFO/ActivityThread(620): Publishing provider com.android.launcher2.settings: com.android.launcher2.LauncherProvider
03-31 11:05:29.282: DEBUG/dalvikvm(620): GC_EXTERNAL_ALLOC freed 1020 objects / 74752 bytes in 72ms
03-31 11:05:29.481: INFO/ActivityManager(59): Start proc jp.co.omronsoft.openwnn for service jp.co.omronsoft.openwnn/.OpenWnnJAJP: pid=626 uid=10023 gids={}
03-31 11:05:30.332: DEBUG/dalvikvm(626): No JNI_OnLoad found in /system/lib/libwnndict.so 0x43e37e00, skipping init
03-31 11:05:30.421: WARN/InputManagerService(59): Got RemoteException sending setActive(false) notification to pid 610 uid 10038
03-31 11:05:30.663: INFO/ActivityManager(59): Displayed activity com.android.launcher/com.android.launcher2.Launcher: 2171 ms (total 2171 ms)
03-31 11:05:30.792: DEBUG/dalvikvm(626): GC_FOR_MALLOC freed 1494 objects / 245968 bytes in 334ms
03-31 11:05:31.081: DEBUG/dalvikvm(626): GC_FOR_MALLOC freed 505 objects / 390912 bytes in 126ms
03-31 11:05:32.772: DEBUG/dalvikvm(620): GC_EXPLICIT freed 11890 objects / 604384 bytes in 158ms
03-31 11:05:33.431: DEBUG/SntpClient(59): request time failed: java.net.SocketException: Address family not supported by protocol
03-31 11:05:37.192: DEBUG/skia(59): purging 35K from font cache [5 entries]
03-31 11:05:37.492: DEBUG/dalvikvm(59): GC_EXPLICIT freed 3860 objects / 181960 bytes in 292ms
-
Ho risolto invocando manualmente il GC, per ora glie lo faccio fare sempre, ma in futuro , lo invocherò solo quando vedo che la memoria sta per finire.
public void onDraw(Canvas canvas) {
System.gc();