Jak zwolnić RAM z poprzednych activity?

Odpowiedz Nowy wątek
2018-09-14 16:20
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");
        }
    }
}
edytowany 1x, ostatnio: user656, 2018-09-14 16:22

Pozostało 580 znaków

2018-09-14 18:31
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.


Wiedza to potęga

Pozostało 580 znaków

2018-09-14 20:28
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ł

edytowany 1x, ostatnio: krancki, 2018-09-14 20:28

Pozostało 580 znaków

2018-09-14 22:15
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.

edytowany 2x, ostatnio: Michał Sikora, 2018-09-14 22:16

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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