編輯:關於Android編程
在主模塊app下的build.gradle下添加如下依賴:
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1'
首先創建一個ExampleApplication,該類繼承於Application,在該類的onCreate方法中添加如下代碼開啟LeakCanary監控:
LeakCanary.install(this);
在AndroidManifest.xml
中的application
標簽中添加如下信息:
android:name=.ExampleApplication
這個時候安裝應用到手機,會自動安裝一個Leaks應用,如下圖:
建立一個ActivityManager
類,單例模式,裡面有一個數組用來保存Activity
:
package com.example.android.sunshine.app;
import android.app.Activity;
import android.util.SparseArray;
import android.view.animation.AccelerateInterpolator;
import java.util.List;
/**
* Created by wuxian on 15/10/23.
*/
public class ActivityManager {
private SparseArray container = new SparseArray();
private int key = 0;
private static ActivityManager mInstance;
private ActivityManager(){}
public static ActivityManager getInstance(){
if(mInstance == null){
mInstance = new ActivityManager();
}
return mInstance;
}
public void addActivity(Activity activity){
container.put(key++,activity);
}
}
然後在DetailActivity
中的onCreate
方法中將當前activity
添加到ActivityManager
的數組中:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
ActivityManager.getInstance().addActivity(this);
if (savedInstanceState == null) {
// Create the detail fragment and add it to the activity
// using a fragment transaction.
Bundle arguments = new Bundle();
arguments.putParcelable(DetailFragment.DETAIL_URI, getIntent().getData());
DetailFragment fragment = new DetailFragment();
fragment.setArguments(arguments);
getSupportFragmentManager().beginTransaction()
.add(R.id.weather_detail_container, fragment)
.commit();
}
}
我們從首頁跳轉到詳情頁的時候會進入DetailActivity
的onCreate
的方法,然後就將當前activity
添加到了數組中,當返回時,我們沒把他從數組中刪除。再次進入的時候,會創建新的activity
並添加到數組中,但是之前的activity
仍然被引用,無法釋放,但是這個activity
不會再被使用,這個時候就造成了內存洩漏。我們來看看LeakCanary
是如何報出這個問題的。
解析的過程有點耗時,所以需要等待一會才會在Leaks應用中,當我們點開某一個信息時,會看到詳細的洩漏信息:
本文實例講述了Android編程繪制圓形圖片的方法。分享給大家供大家參考,具體如下:效果圖如下:第一步:新建RoundView自定義控件繼承Viewpackage com
首先apk不能被代碼混淆(或未經編譯優化),如果混淆了,反編譯出來的代號還是看不懂, 當然,在你沒反編譯出來之前,你也不知道有沒有混淆。 網上各種反編譯工具,&
我們用手機注冊了微信,但是由於要換手機號那怎麼注銷這個微信手機號呢?微信號怎麼注銷呢?手機注冊的微信號怎麼注銷?今天下載吧小編就和大家分享一下手機號注冊的微
本節引言: 好的,上一節中,我們又寫了一個關於Xfermode圖片混排的例子——擦美女衣服的Demo,加上前面的 利用Xfermode