android, coding,

Optimasi Event Listener untuk mencegah Over 65K Methods.

Hangga Aji Sayekti Hangga Aji Sayekti Follow Jan 15, 2016 · 1 min read
Optimasi Event Listener untuk mencegah Over 65K Methods.
Share this

Optimasi Event Listener selain berdampak terhadap alokasi memori seperti yg pernah dibahas oleh Om Jane Velger di sini, ternyata juga berdampak pada jumlah method.

Mari perhatikan perbandingan berikut ini:

1. Tanpa memanggil object new OnClickListener().

btnFirst = (Button) findViewById(R.id.btnFirst);
btnSecond = (Button) findViewById(R.id.btnSecond);
btnThird = (Button) findViewById(R.id.btnThird);

Total methods count: 15594

2. Memanggil 1 object new OnClickListener().

btnFirst = (Button) findViewById(R.id.btnFirst);
btnFirst.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    	Toast.makeText(MainActivity.this, "Click", Toast.LENGTH_SHORT).show();
    }
});
btnSecond = (Button) findViewById(R.id.btnSecond);
btnThird = (Button) findViewById(R.id.btnThird);

Total methods count: 15596

2. Memanggil 2 object new OnClickListener().

btnFirst = (Button) findViewById(R.id.btnFirst);
btnFirst.setOnClickListener(new View.OnClickListener() {
	@Override
    public void onClick(View v) {
    	Toast.makeText(MainActivity.this, "Click", Toast.LENGTH_SHORT).show();
    }
});
btnSecond = (Button) findViewById(R.id.btnSecond);
btnSecond.setOnClickListener(new View.OnClickListener() {
	@Override
    public void onClick(View v) {
    	Toast.makeText(MainActivity.this, "Click 2", Toast.LENGTH_SHORT).show();
	}
});
btnThird = (Button) findViewById(R.id.btnThird);

Total methods count: 15598

3. Setiap Button memanggil satu object onClicklistener dengan pengkondisian

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnFirst = (Button) findViewById(R.id.btnFirst);
        btnFirst.setOnClickListener(onClickListener);
        btnSecond = (Button) findViewById(R.id.btnSecond);
        btnSecond.setOnClickListener(onClickListener);
        btnThird = (Button) findViewById(R.id.btnThird);
        btnThird.setOnClickListener(onClickListener);

    }

    View.OnClickListener onClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.btnFirst :
                    Toast.makeText(MainActivity.this, getString(R.string.btn_first), Toast.LENGTH_SHORT).show();
                    break;

                case R.id.btnSecond :
                    Toast.makeText(MainActivity.this, getString(R.string.btn_second), Toast.LENGTH_SHORT).show();
                    break;

                case R.id.btnThird :
                    Toast.makeText(MainActivity.this, getString(R.string.btn_third), Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    };

Total methods count: 15596

Mengapa bisa demikian.

Karena setiap kita memanggil new View.OnClickListener() itu berarti kita sedang membuat object onClickListener sekaligus memanggil override method onClick() yang ada didalamnya.
CMIIW.. 🙂

Hangga Aji Sayekti
Written by Hangga Aji Sayekti
A passionate Software Engineer from Indonesia with experience since 2008. Bachelor's degree in Mathematics and loves Science and Computers.