Android рдХреЗ рд▓рд┐рдП Aibolit

рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп UI рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд┐рддрдиреА рдХрдард┐рди рд╣реИред рдмрд╛рд░-рдмрд╛рд░ рдЖрдкрдХреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛрдб рдХреЗ рдкрд╣рд╛рдбрд╝реЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛: findViewbyId, setOnClickListener, getources ()ред GetDrawable, ... рдЗрд╕ рдХрд╛рдо рдХреЛ AOP рдХреЗ рдХрдВрдзреЛрдВ рдкрд░ рд╢рд┐рдлреНрдЯ рдХрд░рдиреЗ рдХреА рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рдЗрдЪреНрдЫрд╛ рд╣реИред рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рддреНрд╡рд░рд┐рдд рдЦреЛрдЬ, рд╢рд╛рдпрдж рдХреЗрд╡рд▓ рд░реЛрдмреЛрдЧреНрдпреВрдЗрд╕ рдкрд░, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдм рдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдерд╛ рд╣рд╛рд▓рд╛рдБрдХрд┐, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЖрдХрд╛рд░ (~ 0.5 mb) рд╣реИ, рдЬреЛ рдХрдИ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП RoboApplication рдФрд░ RoboActivity рд╕реЗ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдЧрддрд┐рд╡рд┐рдзрд┐ рд╡рд░реНрдЧреЛрдВ рдХреА рд╡рд┐рд░рд╛рд╕рдд рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдЖрдк рд╣рдореЗрд╢рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдРрдмреЛрд▓рд┐рдЯ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдПрдХ рдЖрд╕рд╛рди (~ 40kb), рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рдФрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреЛ рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рдпреВрдЖрдИ рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред


рдЕрд╡рд╕рд░реЛрдВ




рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ


рд╣рдо рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
repositories { maven { url 'https://dl.bintray.com/alexeydanilov/maven' } } dependencies { compile 'com.danikula:aibolit:1.0' } 

рдФрд░ рдЗрдВрдЬреЗрдХреНрд╢рди
 public class AibolitChatActivity extends Activity { // annotate fields to be injected... @InjectView(R.id.messageEditText) private EditText messageEditText; @InjectView(R.id.historyListView) private ListView historyListView; @InjectResource(R.string.symbols_count) private String symbolsCountPattern; @InjectSystemService(Context.NOTIFICATION_SERVICE) private NotificationManager notificationManager; @InjectService private HttpManager httpManager; @InjectResource(R.layout.content) private View content; ... @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.chat_activity); // initialize annotated fields and methods Aibolit.doInjections(this); // or just Aibolit.setInjectedContentView(this); ... } // annotate event handlers... @InjectOnClickListener(R.id.sendButton) private void onSendButtonClick(View v) { // handle onClick event } @InjectOnClickListener(R.id.clearHistoryButton) private void onClearHistoryButtonClick(View v) { // handle onClick event } @InjectOnTextChangedListener(R.id.messageEditText) public void onMessageTextChanged(CharSequence s, int start, int before, int count) { // handle text changed event } ... } 

рдХреЛрдб рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдпрд╣ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд░рд╛рд╣рдд рдорд┐рд▓реА рд╣реИ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, setOnClickListener рддрд░реАрдХреЛрдВ рдФрд░ рдкрд╕рдВрдж рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп:
  1. рд╣рдо рдЙрд╕ рджреГрд╢реНрдп рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ InjectView рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП;
  2. рд╣рдо рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЗрд╕реА InjectOn * рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдФрд░ рдЯреЗрдХреНрд╕реНрдЯ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рдереЗред Aibolit рдЖрдкрдХреЛ рд╕рднреА рдкреНрд░рдореБрдЦ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
    OnClick, OnLongClick, OnTouch, OnKey, OnTextChanged, OnCheckedChange, OnFocusChange, OnItemClick, OnItemSelected, OnEditor.ction, OnCreateContextMenu;
  3. рд╣рдо Aibolit.doInjections(this); рд╡рд┐рдзрд┐ рдХрд╣рддреЗ рд╣реИрдВ Aibolit.doInjections(this); рд╕рдХреНрд░рд┐рдпрдг рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рджред

2 рддрд░реАрдХреЛрдВ рдХреА рдХреЙрд▓
 setContentView(layoutId); Aibolit.doInjections(this); 

рдПрдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 Aibolit.setInjectedContentView(this); 

Aibolit рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
 @InjectService private HttpManager httpManager; 

рдЖрдк рдРрдмреЛрд▓рд┐рдЯ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ


рдХреЛрдб рд╕реНрд░реЛрдд рдЦреБрд▓реЗ рдФрд░ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИрдВред рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ? Aibolit рдлрд╝реАрд▓реНрдбреНрд╕ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ Inject * annotations рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЕрдкрдирд╛ рдЗрдВрдЬреЗрдХреНрдЯрд░ рд╡рд░реНрдЧ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдВрд╕рд╛рдзрди рдХреЗ рд╕рд╛рде рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЖрд░рдореНрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдЗрдВрдЬреЗрдХреНрдЯрд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреГрд╢реНрдп рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ:
 class ViewInjector extends AbstractFieldInjector<InjectView> { @Override public void doInjection(Object fieldOwner, InjectionContext injectionContext, Field field, InjectView annotation) { int viewId = annotation.value(); View view = injectionContext.getRootView().findViewById(viewId); if (view == null) { // throw exception... } if (!field.getType().isAssignableFrom(view.getClass())) { // throw exception... } try { field.setAccessible(true); field.set(fieldOwner, view); } catch (IllegalArgumentException e) { // throw exception... } catch (IllegalAccessException e) { // throw exception... } } } 

рдЙрддреНрдкрд╛рджрдХрддрд╛


рд╣реЛрд▓реАрд╡рд░реНрд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рд░рдг рдирд╣реАрдВ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕рд┐рд░реНрдл рд╕реВрдЦреЗ рдирдВрдмрд░ рджреВрдВрдЧрд╛ред рдорд╛рдк рдПрдХ рдПрдореБрд▓реЗрдЯрд░ рдкрд░ рдХрд┐рдП рдЧрдП рдереЗред 35 рддрддреНрд╡реЛрдВ (рджреГрд╢реНрдп, рд▓рд╛рдЗрд╕реЗрдВрд╕рдзрд╛рд░рд┐рдпреЛрдВ, рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рдВрд╕рд╛рдзрдиреЛрдВ) рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рд╢рд╛рд╕реНрддреНрд░реАрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдПрдХ рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕реЗ рджреВрд╕рд░реЗ рдЖрд╡рд╢реНрдпрдХ 40-50 рдПрдордПрд╕ рдореЗрдВ рд╕рдВрдХреНрд░рдордг рд╣реЛрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЖрдЗрдмреЛрд▓рд┐рдЯ - 90-100 рдПрдордПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдПред рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рдкреНрд░рддрд┐рдмрд┐рдВрдм-рдЖрдзрд╛рд░рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рд╛рдкреНрдд рдЕрдВрддрд░, IMHO, рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред

Aibolit рдХреЛ рддреИрдпрд╛рд░ рдЙрддреНрдкрд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рдЕрдкрдиреЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓рд╛рдпрдмреНрд░реЗрд░реА рдХреЛрдб рдЕрдкрд╛рдЪреЗ рд▓рд╛рдЗрд╕реЗрдВрд╕, рд╕рдВрд╕реНрдХрд░рдг 2.0 рдХреЗ рддрд╣рдд рдЦреБрд▓рд╛ рдФрд░ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдореБрдЭреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рд╕реБрдЭрд╛рд╡реЛрдВ рдкрд░ рдЦреБрд╢реА рд╣реЛрдЧреАред

UPD 0:
рдЗрд╕реА рддрд░рд╣ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп
roboguice
androidannotations

Source: https://habr.com/ru/post/In132126/


All Articles