2017-06-11 13 views
2

我想优化我的android应用程序中的内存。我实现了一个生命周期方法onCreate(),其中我创建对象,onStart(),其中我设置侦听器白色方法的调用,并且我onDestroy()当我设置null变量和对象并手动调用垃圾收集器白色系统。 gb(),这是一个优化我的MainActivity内存的好习惯吗?在Android应用程序中优化内存onDestroy()

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

您不需要在onDestroy()中取消您的字段。 System.gc()也是多余的。 Java将为您处理所有的事情。 因为活动将被销毁,所以没有人会引用这些字段,活动中的所有对象都将在您的案例中被自动垃圾收集。

您需要做的唯一的事情是在onDestroy()中调用pDialog.dismiss(),因为这个对话框会在销毁导致内存泄漏后引用Activity。

0

在Java中,如果需要内存,垃圾收集器将自动运行。 调用System.gc()立即启动垃圾。它会检查未被认可的对象并将其销毁。

除非对象在C++中本地实现,如Bitmap对象,否则无需担心有关垃圾回收的任何内容。对于以C++实现的对象,您需要调用相应的析构函数,例如Bitmap类中的recycle()方法。