Jak zwolnić RAM z poprzednych activity?

0

Przykładowo jeśli przeszedłem z activity1 - do activity2, jak mogę zwolnić pamięć urządzenia z tej pierwszej klasy? Np. za pomocą ComponentsCallback2

CLASS 1

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Button button1;
Button button2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.activity_main);

        button1=(Button)findViewById(R.id.button1);
        button1.setOnClickListener(this);

        button2=(Button)findViewById(R.id.button2);
        button2.setOnClickListener(this);

    }

public void onClick(View v){

        if (v==button1){
            startActivity(new Intent(MainActivity.this, Activity2.class));
            CustomIntent.customType(MainActivity.this, "fadein-to-fadeout");

        }

        if (v==button2){
            finish();

        }

}

}

CLASS 2

public class Activity2 extends AppCompatActivity implements View.OnClickListener{
Button button3;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.activity_2);

        button3 = (Button) findViewById(R.id.button3);
        button3.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        if (v == button3) {

            startActivity(new Intent(Activity2.this, flagi1.class));
            CustomIntent.customType(Activity2.this, "fadein-to-fadeout");
        }
    }
}
1

W JVM masz GC i nie zwalniasz pamięci ręcznie. To dotyczy również Androida. System zwolni RAM kiedy będzie potrzebował i kiedy uzna za konieczne. Jako programista dbasz tylko o to, żeby nie tworzyć wycieków.

0

Jak chcesz zwolnić pamieć usuń referencje przypisując null wtedy GC we wolnej chwili usunie to z pamięci lub gdy będzie ją potrzebował

1
krancki napisał(a):

Jak chcesz zwolnić pamieć usuń referencje przypisując null wtedy GC we wolnej chwili usunie to z pamięci lub gdy będzie ją potrzebował

Bzdura. Samo przypisanie nulla do referencji niczego nie gwarantuje, bo coś innego może trzymać referencję. Z Activity to już w ogóle ciężko zrobić, bo niespecjalnie można przypisać nulla do samego siebie.

Co do postawionego pytania, to jeżeli chcesz zwolnić pamięć po Activity, to musisz je najpierw ubić wywołując na nim finish() (i oczywiście nie trzymać nigdzie referencji do niego). Dalvik / ART same zadecydują o tym, kiedy należy zwolnić tę pamięć. Ty się tym w ogóle nie przejmuj. ComponentsCallbacks2 nie służy do takich rzeczy, jak sprzątanie Activity. Możesz go użyć np. do zmniejszenia wielkości cachu, posprzątania bitmap czy czegoś w tym stylu, ale raczej rzadko się z tego korzysta.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0