Я знаю, что это, наверное, немой вопрос, но я довольно новичок в разработке Android, и в настоящее время я испытываю OutOfMemoryError в своих приложениях, которые я пытался отлаживать с помощью MAT, но все равно слишком сложно найти утечку в нескольких действиях, тогда я нашел LeakCanary, который кажется более простым и простым в использовании, однако я не мог найти начального пошагового руководства по использованию Leak Canary даже в Google. Я установил LeakCanary через зависимости в моей build.gradle, и это то, что я получил до сих пор:
ExampleApplication.java
public class ExampleApplication extends Application {
public static RefWatcher getRefWatcher(Context context) {
ExampleApplication application = (ExampleApplication) context.getApplicationContext();
return application.refWatcher;
}
private RefWatcher refWatcher;
@Override
public void onCreate() {
super.onCreate();
refWatcher = LeakCanary.install(this);
}
final class KeyedWeakReference extends WeakReference<Object> {
public final String key;
public final String name;
KeyedWeakReference(Object referent, String key, String name,
ReferenceQueue<Object> referenceQueue) {
super(checkNotNull(referent, "referent"), checkNotNull(referenceQueue, "referenceQueue"));
this.key = checkNotNull(key, "key");
this.name = checkNotNull(name, "name");
}
}
public void watch(Object watchedReference, String referenceName) {
checkNotNull(watchedReference, "watchReference");
checkNotNull(referenceName, "referenceName");
if(debuggerControl.isDebuggerAttached()) {
return;
}
final long watchStartNanoTime = System.nanoTime();
String key = UUID.randomUUID().toString();
retainedKeys.add(key);
final KeyedWeakReference reference =
new KeyedWeakReference(watchedReference, key, referenceName, queue);
watchExecutor.execute()
}
}
Скажем, у меня есть Activity, где я хочу, чтобы LeakCanary просматривал объект
SampleActivity.java
public class SampleActivity extends Activity implements View.OnClickListener {
ImageView level001, level002;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.choose_level);
level001 = (ImageView) findViewById(R.id.level001);
level002 = (ImageView) findViewById(R.id.level002);
// Do all kinds of function
// How do I use LeakCanary to watch these objects ?
}
}
Теперь, как я могу использовать LeakCanary, чтобы увидеть, какой объект вызывает утечку памяти. Благодарим вас за помощь и помощь.