i want display random images drawable folder when press button.
i named photos "img_0"...to "img_51"
this tried :
imageview card1, card2, card3, card4, card5; button bplay; arraylist<integer> numbers = new arraylist<integer>(); random randomgenerator = new random(); @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); requestwindowfeature(window.feature_no_title); getwindow().setflags(windowmanager.layoutparams.flag_fullscreen, windowmanager.layoutparams.flag_fullscreen); setrequestedorientation(activityinfo.screen_orientation_landscape); setcontentview(r.layout.activity_play); setreferences(); } private void setreferences() { card1 = (imageview) findviewbyid(r.id.card1); card2 = (imageview) findviewbyid(r.id.card2); card3 = (imageview) findviewbyid(r.id.card3); card4 = (imageview) findviewbyid(r.id.card4); card5 = (imageview) findviewbyid(r.id.card5); bplay = (button) findviewbyid(r.id.bplay2); bplay.setonclicklistener(this); } private void getrandomnumbers() { while(numbers.size() < 5) { int random = randomgenerator .nextint(51); if (!numbers.contains(random)) { numbers.add(random); } } } private void cleararraylist() { for(int = numbers.size()-1 ; >= 0; i--){ numbers.remove(numbers.get(i)); } } private void setbitmap(imageview iv, int n) { string str = "img_" + numbers.get(n); int resid = getresources().getidentifier(str, "drawable", getpackagename()); iv.setimageresource(resid); } @override public void onclick(view v) { getrandomnumbers(); setbitmap(card1, 0); setbitmap(card2, 1); setbitmap(card3, 2); setbitmap(card4, 3); setbitmap(card5, 4); cleararraylist(); } i looking in memory tab emulator, , saw memory highly used...
how can reduce memory usage? when press 1 time button has 70 , in vm heap.
any idea welcomed !
i tried bitmap , recycle gives me error.. application has stopped working...
here tried :
private void setbitmap(imageview iv, int n) { string str = "img_" + numbers.get(n); bitmap bitmap = bitmapfactory.decoderesource(getresources(), getresourceid(str, "drawable", this)); iv.setimagebitmap(bitmap); bitmap.recycle(); } here logcat :
07-10 16:57:10.402 1906-1906/? i/art﹕ not late-enabling -xcheck:jni (already on) 07-10 16:57:14.321 1906-1937/com.symplyfyweb.gherghina.oldschoolwesternpoker d/openglrenderer﹕ use egl_swap_behavior_preserved: true 07-10 16:57:14.335 1906-1906/com.symplyfyweb.gherghina.oldschoolwesternpoker d/﹕ hostconnection::get() new host connection established 0xb4a93f40, tid 1906 07-10 16:57:14.349 1906-1906/com.symplyfyweb.gherghina.oldschoolwesternpoker d/atlas﹕ validating map... 07-10 16:57:14.813 1906-1937/com.symplyfyweb.gherghina.oldschoolwesternpoker d/﹕ hostconnection::get() new host connection established 0xb4b270b0, tid 1937 07-10 16:57:14.957 1906-1937/com.symplyfyweb.gherghina.oldschoolwesternpoker i/openglrenderer﹕ initialized egl, version 1.4 07-10 16:57:15.032 1906-1937/com.symplyfyweb.gherghina.oldschoolwesternpoker d/openglrenderer﹕ enabling debug mode 0 07-10 16:57:15.054 1906-1937/com.symplyfyweb.gherghina.oldschoolwesternpoker w/egl_emulation﹕ eglsurfaceattrib not implemented 07-10 16:57:15.063 1906-1937/com.symplyfyweb.gherghina.oldschoolwesternpoker w/openglrenderer﹕ failed set egl_swap_behavior on surface 0xb4b23b00, error=egl_success 07-10 16:57:15.169 1906-1906/com.symplyfyweb.gherghina.oldschoolwesternpoker i/choreographer﹕ skipped 38 frames! application may doing work on main thread. 07-10 16:57:16.748 1906-1906/com.symplyfyweb.gherghina.oldschoolwesternpoker i/choreographer﹕ skipped 93 frames! application may doing work on main thread. 07-10 16:57:22.533 1906-1937/com.symplyfyweb.gherghina.oldschoolwesternpoker w/egl_emulation﹕ eglsurfaceattrib not implemented 07-10 16:57:22.533 1906-1937/com.symplyfyweb.gherghina.oldschoolwesternpoker w/openglrenderer﹕ failed set egl_swap_behavior on surface 0xb4b23cc0, error=egl_success 07-10 16:57:23.378 1906-1913/com.symplyfyweb.gherghina.oldschoolwesternpoker w/art﹕ suspending threads took: 19.779ms 07-10 16:57:28.898 1906-1913/com.symplyfyweb.gherghina.oldschoolwesternpoker w/art﹕ suspending threads took: 12.510ms 07-10 16:57:31.940 1906-1918/com.symplyfyweb.gherghina.oldschoolwesternpoker i/art﹕ clamp target gc heap 66mb 64mb 07-10 16:57:32.352 1906-1906/com.symplyfyweb.gherghina.oldschoolwesternpoker i/art﹕ alloc sticky concurrent mark sweep gc freed 8(432b) allocspace objects, 0(0b) los objects, 1% free, 62mb/64mb, paused 1.468ms total 17.160ms 07-10 16:57:32.378 1906-1906/com.symplyfyweb.gherghina.oldschoolwesternpoker i/art﹕ clamp target gc heap 66mb 64mb 07-10 16:57:32.378 1906-1906/com.symplyfyweb.gherghina.oldschoolwesternpoker i/art﹕ alloc partial concurrent mark sweep gc freed 14(576b) allocspace objects, 0(0b) los objects, 1% free, 62mb/64mb, paused 889us total 19.090ms 07-10 16:57:32.444 1906-1906/com.symplyfyweb.gherghina.oldschoolwesternpoker i/art﹕ clamp target gc heap 66mb 64mb 07-10 16:57:32.444 1906-1906/com.symplyfyweb.gherghina.oldschoolwesternpoker i/art﹕ alloc concurrent mark sweep gc freed 8(12kb) allocspace objects, 0(0b) los objects, 1% free, 62mb/64mb, paused 789us total 57.650ms 07-10 16:57:32.451 1906-1906/com.symplyfyweb.gherghina.oldschoolwesternpoker i/art﹕ forcing collection of softreferences 12mb allocation 07-10 16:57:32.501 1906-1906/com.symplyfyweb.gherghina.oldschoolwesternpoker i/art﹕ clamp target gc heap 66mb 64mb 07-10 16:57:32.502 1906-1906/com.symplyfyweb.gherghina.oldschoolwesternpoker i/art﹕ alloc concurrent mark sweep gc freed 11(288b) allocspace objects, 0(0b) los objects, 1% free, 62mb/64mb, paused 799us total 49.442ms 07-10 16:57:32.507 1906-1906/com.symplyfyweb.gherghina.oldschoolwesternpoker e/art﹕ throwing outofmemoryerror "failed allocate 13068012 byte allocation 1263808 free bytes , 1234kb until oom" 07-10 16:57:32.524 1906-1906/com.symplyfyweb.gherghina.oldschoolwesternpoker i/art﹕ alloc sticky concurrent mark sweep gc freed 5(448b) allocspace objects, 0(0b) los objects, 1% free, 62mb/64mb, paused 731us total 14.526ms 07-10 16:57:32.550 1906-1906/com.symplyfyweb.gherghina.oldschoolwesternpoker i/art﹕ clamp target gc heap 66mb 64mb 07-10 16:57:32.551 1906-1906/com.symplyfyweb.gherghina.oldschoolwesternpoker i/art﹕ alloc partial concurrent mark sweep gc freed 10(376b) allocspace objects, 0(0b) los objects, 1% free, 62mb/64mb, paused 954us total 19.113ms 07-10 16:57:32.664 1906-1906/com.symplyfyweb.gherghina.oldschoolwesternpoker i/art﹕ clamp target gc heap 66mb 64mb 07-10 16:57:32.665 1906-1906/com.symplyfyweb.gherghina.oldschoolwesternpoker i/art﹕ alloc concurrent mark sweep gc freed 3(96b) allocspace objects, 0(0b) los objects, 1% free, 62mb/64mb, paused 1.193ms total 108.749ms 07-10 16:57:32.675 1906-1906/com.symplyfyweb.gherghina.oldschoolwesternpoker w/art﹕ suspending threads took: 9.507ms 07-10 16:57:32.675 1906-1906/com.symplyfyweb.gherghina.oldschoolwesternpoker i/art﹕ forcing collection of softreferences 12mb allocation 07-10 16:57:32.770 1906-1906/com.symplyfyweb.gherghina.oldschoolwesternpoker i/art﹕ clamp target gc heap 66mb 64mb 07-10 16:57:32.770 1906-1906/com.symplyfyweb.gherghina.oldschoolwesternpoker i/art﹕ alloc concurrent mark sweep gc freed 3(96b) allocspace objects, 0(0b) los objects, 1% free, 62mb/64mb, paused 11.517ms total 93.336ms 07-10 16:57:32.775 1906-1906/com.symplyfyweb.gherghina.oldschoolwesternpoker e/art﹕ throwing outofmemoryerror "failed allocate 13068012 byte allocation 1263992 free bytes , 1234kb until oom" 07-10 16:57:32.777 1906-1906/com.symplyfyweb.gherghina.oldschoolwesternpoker d/skia﹕ --- allocation failed scaled bitmap 07-10 16:57:32.779 1906-1906/com.symplyfyweb.gherghina.oldschoolwesternpoker d/androidruntime﹕ shutting down vm --------- beginning of crash 07-10 16:57:32.802 1906-1906/com.symplyfyweb.gherghina.oldschoolwesternpoker e/androidruntime﹕ fatal exception: main process: com.symplyfyweb.gherghina.oldschoolwesternpoker, pid: 1906 java.lang.outofmemoryerror: failed allocate 13068012 byte allocation 1263992 free bytes , 1234kb until oom @ dalvik.system.vmruntime.newnonmovablearray(native method) @ android.graphics.bitmapfactory.nativedecodeasset(native method) @ android.graphics.bitmapfactory.decodestream(bitmapfactory.java:609) @ android.graphics.bitmapfactory.decoderesourcestream(bitmapfactory.java:444) @ android.graphics.bitmapfactory.decoderesource(bitmapfactory.java:467) @ android.graphics.bitmapfactory.decoderesource(bitmapfactory.java:497) @ com.symplyfyweb.gherghina.oldschoolwesternpoker.playactivity.setbitmap(playactivity.java:97) @ com.symplyfyweb.gherghina.oldschoolwesternpoker.playactivity.onclick(playactivity.java:112) @ android.view.view.performclick(view.java:4780) @ android.view.view$performclick.run(view.java:19866) @ android.os.handler.handlecallback(handler.java:739) @ android.os.handler.dispatchmessage(handler.java:95) @ android.os.looper.loop(looper.java:135) @ android.app.activitythread.main(activitythread.java:5257) @ java.lang.reflect.method.invoke(native method) @ java.lang.reflect.method.invoke(method.java:372) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:903) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:698)
you should cache images need loaded 1 time.
it simple, have when go load bitmap, check see if it's in cache , if use that. if isn't load image. prevent loading resources multiple times.
hashmap<string, integer> rescache = new hashmap<string, integer>(); ... ... private void setbitmap(imageview iv, int n) { string str = "img_" + numbers.get(n); int resid = -1; if (rescache.containskey(str)) { resid = rescache.get (str); } else { resid = getresources().getidentifier(str, "drawable", getpackagename()); rescache.put (str, resid); } iv.setimageresource(resid); }
Comments
Post a Comment