0

MATツールを使用してアプリケーションをテストしていて、メモリリークがあることがわかりましたが、コード内でそれを見つけることができませんでした。同じように私を助けてください。

//最初のアクティビティ

package intent.sample;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class IntentA extends Activity implements OnClickListener {
    Handler handler = new Handler();
    private Intent i;
    private Button button;

    public void onClick(View src) {
        if (src == (View) button) {
            i = new Intent(this, IntentSampleActivity.class);
            handler.postDelayed(new Runnable() {

                public void run() {
                    startActivity(i);
                }
            }, 20000);
        }
    }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main1);
        button = (Button) findViewById(R.id.screen2button);
        button.setOnClickListener(this);
    }

    @Override
    protected void onStop() {
        super.onStop();
        this.finish();
    }

    @Override
    protected void onPause() {
        super.onPause();
        this.finish();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        handler = null;
        i = null;
        this.finish();
    }
}

//2番目のアクティビティ

package intent.sample;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class IntentSampleActivity extends Activity implements OnClickListener {

    private Button button;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        button = (Button) findViewById(R.id.screen1button);
        button.setOnClickListener(this);
    }

    public void onClick(View scr) {
        if (scr == (View) button) {
            Intent ii = new Intent(this, IntentA.class);
            startActivity(ii);
        }
    }

    @Override
    protected void onStop() {
        super.onStop();
        this.finish();
    }

    @Override
    protected void onPause() {
        super.onPause();
        this.finish();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        this.finish();
    }
}

新しいスレッドを作成して、アクティビティを開始しています。これにより、アクティビティクラスの新しいインスタンスが作成されますか?

4

1 に答える 1

0

このコードでは、アクティビティを起動するたびに、新しいインスタンスが作成されます。これを回避するには、アクティビティにandroidmanifest.xmlファイルで起動モードを使用する必要があります。起動モードは、単一のタスクまたは単一のインスタンスにすることができます。

とにかくどうもありがとう。

于 2012-06-06T04:24:04.877 に答える