Я тестирую свое приложение с помощью инструмента MAT и обнаруживаю, что есть утечка памяти, но я не смог найти его в коде. Пожалуйста, помогите мне на том же.Утечка памяти Android в действии
// Первая активность
package intent.sample;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class IntentA extends Activity implements OnClickListener {
Handler handler = new Handler();
private Intent i;
private Button button;
public void onClick(View src) {
if (src == (View) button) {
i = new Intent(this, IntentSampleActivity.class);
handler.postDelayed(new Runnable() {
public void run() {
startActivity(i);
}
}, 20000);
}
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
button = (Button) findViewById(R.id.screen2button);
button.setOnClickListener(this);
}
@Override
protected void onStop() {
super.onStop();
this.finish();
}
@Override
protected void onPause() {
super.onPause();
this.finish();
}
@Override
protected void onDestroy() {
super.onDestroy();
handler = null;
i = null;
this.finish();
}
}
// Вторая активность
package intent.sample;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class IntentSampleActivity extends Activity implements OnClickListener {
private Button button;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button = (Button) findViewById(R.id.screen1button);
button.setOnClickListener(this);
}
public void onClick(View scr) {
if (scr == (View) button) {
Intent ii = new Intent(this, IntentA.class);
startActivity(ii);
}
}
@Override
protected void onStop() {
super.onStop();
this.finish();
}
@Override
protected void onPause() {
super.onPause();
this.finish();
}
@Override
protected void onDestroy() {
super.onDestroy();
this.finish();
}
}
Я создаю новый поток и начать деятельность. Будет ли это создавать новый экземпляр класса активности?
Я присвоил null моему обработчику в методе Ondestroy, но я не уверен, что начальный поток создаст новое действие с тем же экземпляром или создаст новый экземпляр? – Prem
Вы действительно не должны называть 'finish()' из 'onPause()', 'onStop()' или 'onDestroy()'. Это не только нарушает жизненный цикл стандартного приложения, но 'onDestroy()', в частности, будет когда-либо вызываться только в том случае, если активность уже завершена. – derekerdmann
да, это нормально, но я не буду создавать проблемы с памятью. Пожалуйста, поправьте меня, если я ошибаюсь. – Prem