bump! Hey guys, don't be shy, I know you want to share your knowledge about images, out of memory error, etc
:D On Apr 27, 6:06 pm, fr4gus <[email protected]> wrote: > Hi everyone, > > I would like to share some findings related to using images on > activities and impact on an application creating multiples activities > or changing orientation. > > What I coded: > > public class BigImageActivity extends Activity { > int count; > > @Override > protected void onCreate(Bundle savedInstanceState) { > super.onCreate(savedInstanceState); > Intent intent = getIntent(); > if (intent != null) { > count = intent.getIntExtra("count", 0); > } > > setContentView(R.layout.bigimagelayout); > > TextView txtView = (TextView) findViewById(R.id.Counter); > txtView.setText("Activity: " + count); > > Button openNew = (Button) findViewById(R.id.OpenNew); > openNew.setOnClickListener(new View.OnClickListener() { > > @Override > public void onClick(View v) { > startNewActivity(count); > } > }); > } > > public void startNewActivity(int count) { > Intent intent = new Intent(); > intent.setClass(this, BigImageActivity.class); > intent.putExtra("count", count + 1); > startActivity(intent); > > } > > } > > Layout: > <?xml version="1.0" encoding="utf-8"?> > <LinearLayout > xmlns:android="http://schemas.android.com/apk/res/android" > android:layout_width="match_parent" > android:layout_height="wrap_content" android:orientation="vertical"> > <Button > android:layout_height="wrap_content" > android:id="@+id/OpenNew" > android:layout_width="match_parent" > android:text="Open New" /> > <TextView > android:layout_width="wrap_content" > android:layout_height="wrap_content" > android:layout_gravity="center_horizontal" > android:text="0" > android:id="@+id/Counter" /> > <ImageView > android:id="@+id/BigImage" > android:layout_height="wrap_content" > android:layout_width="wrap_content" > android:scaleType="fitCenter" > android:src="@drawable/domo2048" /> > </LinearLayout> > > Image resource called domo2048 its an JPEG mage of 2048x1536 and about > 627Kb (physical size) > > I was able to create... I think stack is better ;), about 233 > activities using that button. I got my app killed during the process > but Android was able to recreate them,so I was able to go back through > all activities. Curiously I got my app killed several times too while > presing back till activity 0. > > The second finding was that, with only one activity, but changing > orientation I got an application crash afte a ramdom number of > orientation changes ( some times at third try, some times higher > number, depending of how fast I did it between changes) > > What I got on my logcat was the following: > > 04-27 17:36:48.217: INFO/WindowManager(1574): Setting rotation to 1, > animFlags=0 > 04-27 17:36:48.237: INFO/ActivityManager(1574): Config changed: > { scale=1.0 imsi=712/2 loc=en_US touch=3 keys=2/1/2 nav=2/1 orien=2 > layout=34 uiMode=17 seq=402} > 04-27 17:36:48.277: ERROR/dalvikvm-heap(25598): Heap Massage needed > (14155776-byte external allocation too big) > 04-27 17:36:48.277: ERROR/dalvikvm-heap(25598): Full GC (don't collect > SoftReferences) > 04-27 17:36:48.297: INFO/UsageStats(1574): Unexpected resume of > com.schematic.android while already resumed in com.schematic.android > 04-27 17:36:48.307: DEBUG/dalvikvm(25598): GC_EXTERNAL_ALLOC freed 352 > objects / 22840 bytes in 32ms > 04-27 17:36:48.317: INFO/GPSButton(1574): Update State > 04-27 17:36:48.397: ERROR/dalvikvm-heap(25598): Heap Massage was > successful... > > I got it several times, before get this: > > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): > java.lang.RuntimeException: Unable to start activity > ComponentInfo{com.schematic.android.grindr/ > com.schematic.android.BigImageActivity}: > android.view.InflateException: Binary XML file line #8: Error > inflating class <unknown> > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > android.app.ActivityThread.performLaunchActivity(ActivityThread.java: > 2663) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > android.app.ActivityThread.handleLaunchActivity(ActivityThread.java: > 2679) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java: > 3815) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > android.app.ActivityThread.access$2400(ActivityThread.java:125) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > android.app.ActivityThread$H.handleMessage(ActivityThread.java:2037) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > android.os.Handler.dispatchMessage(Handler.java:99) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > android.os.Looper.loop(Looper.java:123) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > android.app.ActivityThread.main(ActivityThread.java:4627) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > java.lang.reflect.Method.invokeNative(Native Method) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > java.lang.reflect.Method.invoke(Method.java:521) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > com.android.internal.os.ZygoteInit > $MethodAndArgsCaller.run(ZygoteInit.java:868) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > dalvik.system.NativeStart.main(Native Method) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): Caused by: > android.view.InflateException: Binary XML file line #8: Error > inflating class <unknown> > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > android.view.LayoutInflater.createView(LayoutInflater.java:513) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayo > utInflater.java: > 56) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > android.view.LayoutInflater.rInflate(LayoutInflater.java:618) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > android.view.LayoutInflater.inflate(LayoutInflater.java:407) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > android.view.LayoutInflater.inflate(LayoutInflater.java:320) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > android.view.LayoutInflater.inflate(LayoutInflater.java:276) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.jav a: > 198) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > android.app.Activity.setContentView(Activity.java:1647) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > com.schematic.android.BigImageActivity.onCreate(BigImageActivity.java: > 23) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > android.app.Instrumentation.callActivityOnCreate(Instrumentation.java: > 1047) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > android.app.ActivityThread.performLaunchActivity(ActivityThread.java: > 2627) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): ... 12 more > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): Caused by: > java.lang.reflect.InvocationTargetException > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > android.widget.ImageView.<init>(ImageView.java:108) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > java.lang.reflect.Constructor.constructNative(Native Method) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > java.lang.reflect.Constructor.newInstance(Constructor.java:446) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > android.view.LayoutInflater.createView(LayoutInflater.java:500) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): ... 23 more > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): Caused by: > java.lang.OutOfMemoryError: bitmap size exceeds VM budget > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > android.graphics.Bitmap.nativeCreate(Native Method) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > android.graphics.Bitmap.createBitmap(Bitmap.java:468) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > android.graphics.Bitmap.createBitmap(Bitmap.java:435) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > android.graphics.Bitmap.createScaledBitmap(Bitmap.java:340) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:488) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:462) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java: > 323) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java: > 697) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > android.content.res.Resources.loadDrawable(Resources.java:1767) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > android.content.res.TypedArray.getDrawable(TypedArray.java:601) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): at > android.widget.ImageView.<init>(ImageView.java:118) > 04-27 17:36:51.057: ERROR/AndroidRuntime(25598): ... 27 more > 04-27 17:36:51.067: WARN/ActivityManager(1574): Force finishing > activity com.schematic.android.grindr/.BigImageActivity > > I did use the heap monitor tool on Eclipse, and application heap was > never above 4Mb. As far as I understand, befor Android 3.0 bitmap heap > size is not "available". > > My concern is with UIs that uses a lot of images and may be affected > when user changes orientation several times. > > Is there a way to release memory of images that are used on layouts? > > Should I get the drawables during runtime (using getDrawable) and set > it on my views when needed similarly > ashttp://android.git.kernel.org/?p=platform/packages/apps/Launcher.git;... > > If some Android Developer/Engineer wants to jump in and correct me I > would be more than happy :D > > -f4 -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

