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().
0 1 2 |
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().
0 1 2 3 4 5 6 7 8 |
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().
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
@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.. 🙂