掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
Eclipse 有個插件工具Mat(Memory Analyzer Tool)可以幫助定位內(nèi)存泄漏的對象。

總結(jié): MAT tool不會直接告訴你哪里內(nèi)存泄漏,但是會列出懷疑的對象,需要你仔細檢查這些對象為什么沒有被釋放掉。
下面是測試code, 在Android 4.2.2上測試過。 1. 此種情況可以引起Activity無法回收的情況,因為直接用類似private static Activity a0引用創(chuàng)建的Activity,導(dǎo)致Activity無法回收。 2. 此種情況沒有引起Activity 無法回收的情況。 按理說這種情況應(yīng)該也會導(dǎo)致靜態(tài)Drawable 鎖定Activity, 引用關(guān)系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);
- }
- }

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流