Note that there are some explanatory texts on larger screens.

plurals
  1. POMemory Leaks in Android application
    primarykey
    data
    text
    <p>I'm experience some memory leaks in my application. The first time I suspected the memory leak was when I stress-tested my application by hitting a button to start a new <code>Activity</code>. After using <code>DDMS</code> and dumping out a <code>.hprof file</code>, this file I opened with the <code>Eclipse Memory Analyzer</code></p> <p>I got three possible Memory Leaks, shown in a Pie chart: <img src="https://i.stack.imgur.com/gaav6.png" alt="enter image description here"></p> <p>And a description to the Memory Leaks:</p> <p><strong>Suspect 1</strong></p> <p>122 instances of "android.widget.LinearLayout", loaded by "" occupy 29 585 384 (38,74%) bytes. </p> <p>Biggest instances:</p> <pre><code>•android.widget.LinearLayout @ 0x4258c008 - 2 268 848 (2,97%) bytes. •android.widget.LinearLayout @ 0x425c8688 - 2 268 848 (2,97%) bytes. •android.widget.LinearLayout @ 0x425e3988 - 2 268 848 (2,97%) bytes. •android.widget.LinearLayout @ 0x4296e198 - 2 268 848 (2,97%) bytes. •android.widget.LinearLayout @ 0x429d3aa8 - 2 268 848 (2,97%) bytes. •android.widget.LinearLayout @ 0x42a10c78 - 2 268 848 (2,97%) bytes. •android.widget.LinearLayout @ 0x448a1f10 - 2 268 848 (2,97%) bytes. •android.widget.LinearLayout @ 0x44a65d58 - 2 268 848 (2,97%) bytes. •android.widget.LinearLayout @ 0x42a14098 - 2 268 824 (2,97%) bytes. •android.widget.LinearLayout @ 0x4258bd30 - 999 528 (1,31%) bytes. •android.widget.LinearLayout @ 0x425c83b0 - 999 528 (1,31%) bytes. •android.widget.LinearLayout @ 0x425ddff8 - 999 528 (1,31%) bytes. •android.widget.LinearLayout @ 0x4296df80 - 999 528 (1,31%) bytes. •android.widget.LinearLayout @ 0x42a109a0 - 999 528 (1,31%) bytes. •android.widget.LinearLayout @ 0x42a13dc0 - 999 528 (1,31%) bytes. •android.widget.LinearLayout @ 0x448a1c38 - 999 528 (1,31%) bytes. •android.widget.LinearLayout @ 0x448cc338 - 999 528 (1,31%) bytes. •android.widget.LinearLayout @ 0x44a65a80 - 999 528 (1,31%) bytes. </code></pre> <p><strong>Suspect 2</strong></p> <p>15 instances of "android.widget.FrameLayout", loaded by "" occupy 29 405 016 (38,51%) bytes. </p> <p>Biggest instances:</p> <pre><code>•android.widget.FrameLayout @ 0x4245b490 - 3 266 728 (4,28%) bytes. •android.widget.FrameLayout @ 0x4247a330 - 3 266 728 (4,28%) bytes. •android.widget.FrameLayout @ 0x425aa1d8 - 3 266 728 (4,28%) bytes. •android.widget.FrameLayout @ 0x425df8b0 - 3 266 728 (4,28%) bytes. •android.widget.FrameLayout @ 0x425efe68 - 3 266 728 (4,28%) bytes. •android.widget.FrameLayout @ 0x42627590 - 3 266 728 (4,28%) bytes. •android.widget.FrameLayout @ 0x42987a70 - 3 266 728 (4,28%) bytes. •android.widget.FrameLayout @ 0x4299df20 - 3 266 728 (4,28%) bytes. •android.widget.FrameLayout @ 0x448b6f28 - 3 266 728 (4,28%) bytes. </code></pre> <p><strong>Suspect 3</strong></p> <pre><code>2 682 instances of "java.lang.Class", loaded by "&lt;system class loader&gt;" occupy 8 662 744 (11,34%) bytes. Biggest instances: •class android.content.res.Resources @ 0x41a4f708 - 7 485 176 (9,80%) bytes. </code></pre> <p>My first thought was to look in the <code>R.java</code> file, because I could see some hex references to the possible memory leak. I tried to search after the hex-string from Eclipse Memory Analyzer, but I couldn't find the addresses in the <code>R.java</code> file.</p> <p>Then I looked in the Dominator Tree, and this is the result: <img src="https://i.stack.imgur.com/CH3Sq.png" alt="enter image description here"></p> <p>This is only the first entry in the list, but this is the biggest one. </p> <p>With this information, can anybody give me a hint on how I can track the Memory Leak? Add a comment if I need to add additional information to this post. </p> <p>Thanks in advance. </p> <p><strong>EDIT</strong></p> <p>The problem may be in my Base class. All the Activities inherites from this class. This classes job is to set up a SlidingMenu, in the left upper corner. This is the code for this class:</p> <pre><code> public class Base extends Activity implements OnSlideMenuItemClickListener { public SlideMenu slidemenu; ImageButton b; Time t; BluetoothCommunicator btCom; BroadcastReceiver btBroadCaster; MonitorBluetoothState bluetoothState; public void setTab(int id) { setContentView(id); overridePendingTransition(R.anim.activityfade, R.anim.activityfadeout); slidemenu = (SlideMenu) findViewById(R.id.slideMenu); slidemenu.init(this, R.menu.slide, this, 450); slidemenu.setHeaderImage(getResources().getDrawable(R.drawable.ic_launcher)); b = (ImageButton) findViewById(R.id.BtnSlide); b.setOnClickListener(new OnClickListener() { public void onClick(View v) { slidemenu.show(); } }); b.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: b.setImageResource(R.drawable.lincolor); break; case MotionEvent.ACTION_UP: b.setImageResource(R.drawable.lin); break; } return false; } }); } @Override public void onSlideMenuItemClick(int itemId) { Class&lt;?&gt; cls = null; switch(itemId) { case R.id.item_one: cls = Home.class; break; case R.id.item_two: cls = History.class; break; case R.id.item_three: cls = ClearHistoryDialog.class; break; case R.id.item_four: cls = SendLogDialog.class; break; case R.id.item_five: cls = PasswordDialog.class; break; case R.id.item_six: cls = About.class; break; } Intent intent = new Intent(this, cls); startActivity(intent); } } </code></pre> <p>In my other Activities, this setTab method will be called like this:</p> <pre><code> public class Main extends Base { public void onCreate(Bundle b) { super.onCreate(b); super.setTab(R.layout.Home); } } </code></pre> <p>Where the Home Layout is like this:</p> <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/parent" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#e4e8ed" android:gravity="top" &gt; &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/first" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="0px" &gt; &lt;include android:id="@+id/tabBar" layout="@layout/tab" /&gt; &lt;com.workspace.tobias android:id="@+id/slideMenu" android:layout_width="match_parent" android:layout_height="match_parent" /&gt; &lt;Button android:id="@+id/nist" android:layout_width="match_parent" android:layout_height="67dp" android:layout_gravity="center_horizontal" android:layout_marginBottom="3dp" android:layout_marginLeft="3dp" android:layout_marginRight="3dp" android:layout_marginTop="3dp" android:background="@drawable/ready" android:textColor="#FFFFFF" /&gt; &lt;ListView android:id="@+id/lastCases" android:layout_width="fill_parent" android:layout_height="fill_parent" /&gt; &lt;/LinearLayout&gt; &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/loading" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_marginTop="300dp" android:orientation="horizontal" &gt; &lt;ProgressBar android:id="@+id/progress" android:layout_width="wrap_content" android:layout_height="wrap_content" android:indeterminate="true" /&gt; &lt;TextView android:id="@+id/loadingCases" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:text="@string/Loading" android:textColor="#707070" android:textSize="18dp" android:layout_marginLeft="10dp" /&gt; &lt;/LinearLayout&gt; &lt;/RelativeLayout&gt; </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload