0

Eclipse MAT ヒストグラムは、MemTweaksActivity を起動した後でも SplashActivity インスタンスが存在することを示しています。

public class SplashActivity extends Activity{

@Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

    new Timer().schedule(new TimerTask() {

                @Override
                public void run() {
                    Intent i = new Intent(getApplicationContext(), MemTweaksActivity.class);
                    startActivity(i);
                    finish();

                }
            },2000);

}

}

ただし、タイマーを使用しない次のコードは、SplashActivity インスタンスを正常に削除しました。MAT は SplashActivity の 0 インスタンスを示します。

Intent i = new Intent(getApplicationContext(), MemTweaksActivity.class);       startActivity(i); finish();
4

1 に答える 1

0

onPause()ライフサイクル コールのロギングを追加onStop()onDestroy()、SplashActivity に追加します。MemTweaksActivity が実行される前後のある時点でこれらが呼び出されることがわかります。ガベージ コレクターは、必要に応じてメモリから SpashScreen アクティビティを削除します。これを強制することはできません。

編集:

SplashScreenActivity がまだ存在する理由は、Timer をクリーンアップしていないためです。

これを行う:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    final Timer timer = new Timer();
    timer.schedule(new TimerTask() {        
        @Override
        public void run() {
            Intent i = new Intent(getApplicationContext(), MemTweaksActivity.class);
            startActivity(i);
            finish();
            // Release timer resources
            timer.cancel();         
        }
    },2000);
}
于 2012-08-03T11:13:11.067 に答える