Eclipse 有个插件工具Mat(Memory Analyzer Tool)可以帮助定位内存泄漏的对象。

总结: MAT tool不会直接告诉你哪里内存泄漏,但是会列出怀疑的对象,需要你仔细检查这些对象为什么没有被释放掉。
下面是测试code, 在Android 4.2.2上测试过。 1. 此种情况可以引起Activity无法回收的情况,因为直接用类似private static Activity a0引用创建的Activity,导致Activity无法回收。 2. 此种情况没有引起Activity 无法回收的情况。 按理说这种情况应该也会导致静态Drawable 锁定Activity, 引用关系mBackground1-->Button-->Activity. 待分析
- public class MainActivity extends Activity implements Button.OnClickListener{
 - final private static String TAG = "MainActivity";
 - private static Drawable mBackground1;
 - private static Drawable mBackground2;
 - private static Drawable mBackground3;
 - private static Drawable mBackground4;
 - private static Activity a0 ;
 - private static Activity a1 ;
 - private static Activity a2 ;
 - private static Activity a3 ;
 - private static Activity a4 ;
 - /*
 - * Shutdown intent
 - */
 - private final String INTENT_ACTION_REQUEST_SHUTDOWN =
 - "android.intent.action.ACTION_REQUEST_SHUTDOWN";
 - @Override
 - public void onCreate(Bundle savedInstanceState) {
 - Log.v(TAG, "onCreate Activity="+this);
 - super.onCreate(savedInstanceState);
 - setContentView(R.layout.activity_main);
 - //1
 - if(false){
 - if(a0 == null){
 - a0 = this;
 - Log.v(TAG, "onCreate Activity a0="+a0);
 - }
 - else if(a1 == null){
 - a1 = this;
 - Log.v(TAG, "onCreate Activity a1="+a1);
 - }
 - else if(a2 == null){
 - a2 = this;
 - Log.v(TAG, "onCreate Activity a2="+a2);
 - }
 - else if(a3 == null){
 - a3 = this;
 - Log.v(TAG, "onCreate Activity a3="+a3);
 - }
 - else if(a4 == null){
 - a4 = this;
 - Log.v(TAG, "onCreate Activity a4="+a4);
 - }
 - }
 - //set up button listener
 - Button myButton = (Button)findViewById(R.id.button_poweroff);
 - myButton.setOnClickListener(this);
 - myButton = (Button)findViewById(R.id.button_reboot);
 - myButton.setOnClickListener(this);
 - //2
 - if (mBackground1 == null) {
 - Log.v(TAG, "onCreate mBackground1");
 - mBackground1 = getResources().getDrawable(R.drawable.adbroot_004);
 - myButton.setBackgroundDrawable(mBackground1);
 - }
 - else if(mBackground2 == null){
 - Log.v(TAG, "onCreate mBackground2");
 - mBackground2 = getResources().getDrawable(R.drawable.test002);
 - myButton.setBackgroundDrawable(mBackground2);
 - }
 - else if(mBackground3 == null){
 - Log.v(TAG, "onCreate mBackground3");
 - mBackground3 = getResources().getDrawable(R.drawable.test003);
 - myButton.setBackgroundDrawable(mBackground3);
 - }
 - else if(mBackground4 == null){
 - Log.v(TAG, "onCreate mBackground4");
 - mBackground4 = getResources().getDrawable(R.drawable.adbroot_003);
 - myButton.setBackgroundDrawable(mBackground4);
 - }
 - }
 
                文章名称:AndroidApp内存泄漏检查工具MAT
                
                文章路径:http://www.csdahua.cn/qtweb/news38/461588.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网