我想在我的Android应用程序中优化内存。我实现了一个生命周期方法,如onCreate(),我在其中创建对象,onStart(),其中我设置监听器whit方法调用,当我设置null变量和对象并手动调用垃圾收集器白色系统时,我onDestroy()。 gb(),这是优化我的MainActivity内存的好方法吗?
public class MainActivity extends AppCompatActivity {
private static final String TAG = Registrazione.class.getSimpleName();
private ProgressDialog pDialog;
private Button btnAccedi;
private EditText email, password;
private TextView linkPasswordDimenticata, linkRegistrazione;
private SessionManager session;
private SQLiteHandler db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyApplication myApplication = new MyApplication();
myApplication.attachBaseContext(getApplicationContext());
setContentView(R.layout.activity_main);
btnAccedi = (Button) findViewById(R.id.button_login);
email = (EditText) findViewById(R.id.email_login);
password = (EditText) findViewById(R.id.password_login);
linkRegistrazione = (TextView) findViewById(R.id.textview_registrazione);
linkPasswordDimenticata = (TextView) findViewById(R.id.textview_password);
// Progress dialog
pDialog = new ProgressDialog(this);
pDialog.setCancelable(false);
// SQLite database handler
db = new SQLiteHandler(getApplicationContext());
// Session manager
session = new SessionManager(getApplicationContext());
}
@Override
protected void onStart() {
super.onStart();
if (session.isLoggedIn()) {
// User is already logged in. Take him to main activity
Intent intent = new Intent(MainActivity.this, Tabbed.class);
startActivity(intent);
this.finish();
}
btnAccedi.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (UtilityNetwork.isOnline())
login();
else {
Toast.makeText(getBaseContext(), "Connessione assente", Toast.LENGTH_LONG).show();
}
}
});
linkRegistrazione.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivityRegistrazione();
}
});
linkPasswordDimenticata.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivityPasswordDimenticata();
}
});
}
private void startActivityRegistrazione() {
Intent intent = new Intent(getApplicationContext(), Registrazione.class);
startActivity(intent);
this.finish();
}
@Override
protected void onDestroy() {
super.onDestroy();
btnAccedi = null;
email = null;
password = null;
linkRegistrazione = null;
linkPasswordDimenticata = null;
pDialog = null;
db = null;
System.gc();
}
答案 0 :(得分:0)
在Java中,如果需要内存,垃圾收集器会自动运行。
调用System.gc()
立即启动垃圾。它会检查不相关的对象并销毁它们。
除非在C ++中本地实现对象,例如Bitmap
对象,否则您不必担心垃圾收集。对于用C ++实现的对象,您需要调用相应的析构函数,例如recycle()
类中的Bitmap
方法。
答案 1 :(得分:0)
您无需在onDestroy()
中取消字段。 System.gc()
也是多余的。
Java将为您处理所有事情。
因为Activity将被销毁,所以没有人会引用这些字段,并且在您的情况下,Activity中的所有对象都将被自动垃圾收集。
您唯一需要做的就是在pDialog.dismiss()
中调用onDestroy()
,因为此对话框将在销毁后引用Activity,导致内存泄漏。