рдПрд▓реНрдмрдо рдЧреИрд▓рд░реА рдмрдирд╛рдПрдБ

рд▓реЗрдЦ рдореЗрдВ рдПрд▓реНрдмрдореЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╡рд░ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рд╡рд░реНрдгрди рд╣реИред
рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рд╕реАрдзреЗ рдХреЛрдб рдореЗрдВ рдФрд░ рдХрдорд┐рдЯ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рдИ рдЬрд╛рддреА рд╣реИрдВред
рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рдФрд░ рдмрд╣реБрдд рдХрдо рдЪрд┐рддреНрд░ рд╣реЛрдВрдЧреЗред

рдЙрджреНрджреЗрд╢реНрдп:
- рдПрд▓реНрдмрдореЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдмрдирд╛рдПрдВ
- рдкреНрд░рддреНрдпреЗрдХ рдПрд▓реНрдмрдо рдХреЗ рд▓рд┐рдП рд▓рд╛рдкрддрд╛ рдХрд╡рд░ рдХрд▓рд╛ рдЦреЛрдЬреЗрдВ
- рдЙрдиреНрд╣реЗрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд╕рд╣реЗрдЬреЗрдВ рддрд╛рдХрд┐ рд╣рдорд╛рд░реЗ рдЦрд┐рд▓рд╛рдбрд╝реА рдФрд░ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдЦрд┐рд▓рд╛рдбрд╝реА рдПрд▓реНрдмрдо рдХрд▓рд╛ рджреЗрдЦреЗрдВред

118: рдПрдХ рдмрдЪреНрдЪреЗ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдПрд▓реНрдмрдо рдХрд▓рд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗ

- рдПрдХ рдЦрд╛рд▓реА рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕реНрдЯрдм рдмрдирд╛рдПрдВ
- "рд╡реНрд╣реАрд▓" рдЕрдкрдбреЗрдЯ рд╕реЗ рдорд┐рд▓рдХрд░ рдПрдХреНрд╢рдирдмрд╛рд░ рдореЗрдВ рдПрдХ рд╕рдВрджрд░реНрдн рдореЗрдиреВ рдЬреЛрдбрд╝реЗрдВред
- рдореЗрдиреВ рдмрдирд╛рддреЗ рд╕рдордп - "рдкрд╣рд┐рдпрд╛ рдШреВрдордирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ" (рдЗрд╕реЗ рдкреНрд░рдЧрддрд┐ рдкрдЯреНрдЯреА рджреНрд╡рд╛рд░рд╛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
- рдХрд╕реНрдЯрдо ActionBar рдкреГрд╖реНрдарднреВрдорд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдХрдорд┐рдЯрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдВрдХ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдереЛрдбрд╝реА рд╡реНрдпрд╛рдЦреНрдпрд╛ рд╣реЛрдЧреАред рдЪреВрдБрдХрд┐ рдЕрдиреНрдпрдерд╛ рдпрд╣ рд▓реЗрдЦ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдорд╛рддреНрд░рд╛ рдореЗрдВ рд╣реЛрдЧрд╛ред

/** * Created by recoil on 26.01.14. */ public class ActArtworks extends Activity { private AQuery aq; private Menu optionsMenu; private boolean refreshing = true; private Activity activity; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //    getActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.ab_bgr)); //   getActionBar().setDisplayHomeAsUpEnabled(true); activity = this; aq = new AQuery(activity); } @Override public boolean onCreateOptionsMenu(Menu menu) { this.optionsMenu = menu; //    MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.artwork, menu); //      -   update(); return super.onCreateOptionsMenu(menu); } public void update() { AQUtility.debug("Update progress"); //   "" refreshing = true; //  setRefreshActionButtonState(); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: //      finish(); return true; } return super.onOptionsItemSelected(item); } public void setRefreshActionButtonState() { //   -       if (optionsMenu != null) { final MenuItem refreshItem = optionsMenu .findItem(R.id.menu_refresh); if (refreshItem != null) { if (refreshing) { refreshItem.setActionView(R.layout.actionbar_indeterminate_progress); } else { refreshItem.setActionView(null); } } } } } 


118: рдореАрдбрд┐рдпрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рд╕рднреА рдЯреНрд░реИрдХреНрд╕ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд▓реНрдбрдореЗрдбрд┐рд╕реЙрд░рдЯреНрд░реИрдХ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВ

- рдХреНрд▓рд╛рд╕ MediaStore рдбреЗрдЯрд╛рдмреЗрд╕ рдЯреЗрдмрд▓ рд╕реЗ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рдкрдврд╝рддрд╛ рд╣реИред
рдЬрдм рдлреЛрди рдХреЛ рд░рд┐рдмреВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рд┐рд╕реНрдЯрдо рдПрдХ рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реНрдХреИрди рдХрд░рддрд╛ рд╣реИред рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ "рдореАрдбрд┐рдпрд╛" рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рддрд╣рдд рдЖрдиреЗ рд╡рд╛рд▓реА рдлрд╛рдЗрд▓реЗрдВ рдЬреЛрдбрд╝реА рдЬрд╛рддреА рд╣реИрдВред
- рдЯреНрд░реИрдХ рдЯреЗрдмрд▓ рд╕реЗ рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ - рдХреНрд░рдордмрджреНрдз ArrayList рдХреЛ рдПрдХ рдмрд╛рдЗрдирд░реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

118: рдкрдврд╝реЗ рд╣реБрдП рдЯреНрд░реИрдХ

- рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд╕рд╣реЗрдЬреЗ рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдХреНрд░рдордмрджреНрдз рдХрд░рддреЗ рд╣реБрдП, рд╕рднреА рдЯреНрд░реИрдХреЛрдВ рдХрд╛ рдПрдХ ArrayList рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
- "рд╕рд╣реЗрдЬреЗрдВ" рдФрд░ рдирд╣реАрдВ, рд╣рдо рдкрдЯрд░рд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ "рд╕рд╣реЗрдЬреЗрдВ"

118: рдкреНрд░рджрд░реНрд╢рди рдПрд▓реНрдмрдо рд╕реВрдЪреА

- рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рдЧреНрд░рд┐рдб рд╡реНрдпреВ рдЬреЛрдбрд╝реЗрдВ
- рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдбреЗрдкреНрдЯрд░ рдЬреЛрдбрд╝реЗрдВ
- рдПрдбреЗрдкреНрдЯрд░ рдореЗрдВ, getView рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдПрдХрд▓ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рд╢рд╛рдорд┐рд▓ рд╣реИ
- рд╣рдо Android рдХреЗ рд▓рд┐рдП рдЬреНрдЮрд╛рдд рд╕рднреА рдПрд▓реНрдмрдо рдирд╛рдореЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ

118: рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдПрд▓реНрдмрдо рдХреЛ рдмрд╛рд╣рд░ рдлреЗрдВрдХрдирд╛

- рдПрд▓реНрдмрдо рджреНрд╡рд╛рд░рд╛ рдкрдЯрд░рд┐рдпреЛрдВ рдХреА рд╢реАрдЯ рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░реЗрдВред
- рдкреБрдирд░рд╛рд╡реГрддрд┐ рдЪрд▓рд╛рдПрдБ, рдФрд░ рд╕реВрдЪреА рд╕реЗ рдЧреБрдЬрд╝рд░реЗрдВред рд╕реВрдЪреА рдореЗрдВ рдПрдХ рдПрд▓реНрдмрдо рдХреА рдирдХрд▓ рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдЗрд╕реЗ рд╕рд░рдгреА рд╕реЗ рдмрд╛рд╣рд░ рдлреЗрдВрдХ рджреЗрддреЗ рд╣реИрдВред

118: рдПрдВрдбреНрд░реЙрдЗрдб 8+ рдХреЗ рд╕рд╛рде рдЕрдиреБрдХреВрд▓рддрд╛ рдЬреЛрдбрд╝реА рдЧрдИ (рднрддреАрдЬреА!)

- Appcompat рд╕рдВрдЧрддрддрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ
-рд╕рднреА рд╕рдВрджрд░реНрдн рдореЗрдиреВ рдХреЛ рд░рд┐рдкреЗрдпрд░ рдХрд░реЗрдВ - рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рдпреЛрдЬрдирд╛ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЗрд╕рдХреЗ рднреАрддрд░ рдореЗрдиреВ рдЖрдЗрдЯрдо рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП
 <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:FreeAmp="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/menu_refresh" android:icon="@drawable/ic_action_refresh" android:title="" android:alphabeticShortcut="r" android:orderInCategory="1" FreeAmp:showAsAction="always" /> </menu> 

- рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рд╢реИрд▓реА рд╕реЗ рдкреНрд░рд╡реЗрд╢
 <style name="theme" parent="@style/Theme.AppCompat"> 

- рд╕рднреА рдЧрддрд┐рд╡рд┐рдзрд┐ ActionBarActivity рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА
- рдореЗрдиреВ рдЖрдЗрдЯрдо рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ
 - refreshItem.setActionView(R.layout.actionbar_indeterminate_progress); + MenuItemCompat.setActionView(refreshItem, R.layout.actionbar_indeterminate_progress); 

- рд╕рдВрдЧрддрддрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ ListPopupWindow рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрдпрд╛рдд рдХрд░реЗрдВ

рдореБрдЭреЗ рдХрдИ рд╢рд┐рдерд┐рд▓ рдпреБрдЧреНрдорд┐рдд рд╕рдВрд╢реЛрдзрдиреЛрдВ (рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдмрдЧ) рд╕реЗ рдереЛрдбрд╝рд╛ рд╡рд┐рдЪрд▓рд┐рдд рд╣реЛрдирд╛ рдкрдбрд╝рд╛
118: рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдкреГрд╖реНрдарднреВрдорд┐
118: рдПрдк рдмрд┐рдирд╛ рдЯреИрдЧ рдХреЗ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реБрдЖред рдЕрдиреНрдп рдПрдк рдкрд░ рдЬрд╛рдВрдЪ рдХрд░реЗрдВ
118: .opus рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛

119: рдХрд░реНрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЧрдпреА

- Android рдХреЗ рд▓рд┐рдП рдХрд░реНрд▓
libcurl.so рдЖрдХрд╛рд░:
(рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдПрдлрд╝рдЯреАрдкреА рд╣реИ, ares рдХреЗ рд╕рд╛рде https)
https: ~ 169K (http, https рд╕рд╣рд┐рдд)
ares: ~ 28K (ares рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде https рдХреЛ рдЬреЛрдбрд╝рдХрд░)
ipv6: ~ 0K (рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрдХрд╛рд░ рдирд╣реАрдВ)
+ рдкреВрд░реНрдг: ~ 278K (рд╕рднреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓, рдПрд░реЗрд╕ рдХреЗ рд╕рд╛рде)
рдпрд╣ рдПрдХ рдХрд╛рдлреА рд╕рд╛рд╣рд╕рд┐рдХ рдФрд░ рдХрд╛рдлреА рд╣рдж рддрдХ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдмрд┐рдирд╛ рд╢рд░реНрдд рд▓рд╛рдн рдФрд░ рдмрд┐рдирд╛ рд╢рд░реНрдд рдиреБрдХрд╕рд╛рди рджреЛрдиреЛрдВ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдореИрдВ рд╕рднреА рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрд┐рд▓рд╛рдбрд╝реА рд▓рд┐рдЦрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ - рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдореИрдВ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВред рдХреНрдпрд╛ рдХрд░реНрд▓ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рдЖрдПрдЧрд╛ - рд╣рдо рджреЗрдЦреЗрдВрдЧреЗред

рдлрд┐рд░ рд╕реЗ рдореБрдЦреНрдп рд▓рд╛рдЗрди рд╕реЗ рдПрдХ рд╣рд▓реНрдХрд╛ рдХреБрдВрдж:
119: рд╕реЗрдЯ рд░рд┐рдВрдЧрдЯреЛрди

- рд╡рд░реНрддрдорд╛рди рдЯреНрд░реИрдХ рдХреЛ рд░рд┐рдВрдЧрдЯреЛрди рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ (рдкреНрд░рдХрд╛рд░ рд╕реЗ рдлрд╛рдбрд╝рд╛ рд╣реБрдЖ)ред

119: рдЖрд╕рд╛рди рдХрд░реНрд▓ рдЕрдиреБрд░реЛрдз

- рдХрд░реНрд▓ рдХреЙрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рд╕ рд░реИрдкрд░ред рдЕрдм рддрдХ, рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рддрдкрд╕реНрд╡реА рд╣реИред рдЗрдирдкреБрдЯ рдпреВрдЖрд░рдПрд▓ рдкрд░ - рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА (рдмрд╛рдЗрдЯрдПрдпрд░рдСрдпреВрдЯрдкреБрдЯрд╕реНрдЯреНрд░реАрдо)ред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдЗрд╕рдореЗрдВ рд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдмрдирд╛рдПрдВ, рд▓реЗрдХрд┐рди рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдПрдХ рдмрд┐рдЯрдореИрдк рдмрдирд╛рдПрдВред рдпрд╛ рдХреБрдЫ рдФрд░ред

рд▓реЛрдЧ рдЖрдХрд░ рдмрд╛рд╣рд░реА рдПрд╕рдбреА рдХрд╛рд░реНрдЯ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдорд╛рдВрдЧрдиреЗ рд▓рдЧреЗ

резреирез: рд╣рдо рдПрд▓реНрдмрд╛рд░реНрдЯ рдирд╣реАрдВ рдкрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рдПрд▓реНрдмрдо рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдПрдХ рдЧреНрд░рд┐рдб рдмрдирд╛рддреЗ рд╣реИрдВ

- рд╣рдо рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдп рдореЗрдВ рдХрд╡рд░ рд╕реВрдЪреА рдХреА рдкреАрдврд╝реА рдХреЛ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ
121: рдЧреНрд░рд┐рдбрд╡реНрдпреВ рдкрд┐рдХреНрдЪрд░реНрд╕ рдмрдирд╛рдирд╛

- рдХрд░реНрд▓ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдЖрд╡рд░рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ last.fm рд╕реЗ рдПрд▓реНрдмрдо рдХрд╡рд░ рдХреЗ рд╕рд╛рде json рдкрдврд╝реЗрдВ
  String url = String.format("http://ws.audioscrobbler.com/2.0/?method=album.getinfo&api_key=0cb75104931acd7f44f571ed12cff105&artist=%s&album=%s&format=json", Uri.encode(track.getArtist()),Uri.encode(currentAlbum)); getHttpData = new GetHttpData(); getHttpData.setUrl(url); getHttpData.request(); String result = new String(getHttpData.getByteArray()); 


- рдкрд░рд╕рд┐рдо рдЙрддреНрддрд░
 JSONObject jsonObject = new JSONObject(result); jsonObject = jsonObject.getJSONObject("album"); JSONArray image = jsonObject.getJSONArray("image"); for (int i=0;i<image.length();i++) { jsonObject = image.getJSONObject(i); if (jsonObject.getString("size").equals("extralarge")) { albumArtImageLink = Uri.decode(jsonObject.getString("#text")); AQUtility.debug(track.getArtist()+":"+currentAlbum,albumArtImageLink); } } 


- рдПрдХ рддрд╕реНрд╡реАрд░ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ
 //download image getHttpData = new GetHttpData(); getHttpData.setUrl(albumArtImageLink); getHttpData.request(); ContentResolver res = activity.getContentResolver(); Bitmap bm = BitmapFactory.decodeByteArray(getHttpData.getByteArray(),0,getHttpData.getByteArray().length); 


- рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рддрд╕реНрд╡реАрд░ рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рдмрдЪрд╛рддреЗ рд╣реИрдВ (рд╕реНрд░реЛрдд рдореЗрдВ рдЬрд╛рд╕реВрд╕реА рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдЙрдиреНрд╣реАрдВ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдореЗрдВ рдмрдХрд╡рд╛рд╕ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдПрдВрдбреНрд░реЙрдЗрдб рдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбрд╛рд▓ рджрд┐рдП рд╣реИрдВ)

 // Put the newly found artwork in the database. // Note that this shouldn't be done for the "unknown" album, // but if this method is called correctly, that won't happen. // first write it somewhere String file = Environment.getExternalStorageDirectory() + "/albumthumbs/" + String.valueOf(System.currentTimeMillis()); if (FileUtils.ensureFileExists(file)) { try { OutputStream outstream = new FileOutputStream(file); if (bm.getConfig() == null) { bm = bm.copy(Bitmap.Config.RGB_565, false); if (bm == null) { //return getDefaultArtwork(context); } } boolean success = bm.compress(Bitmap.CompressFormat.JPEG, 75, outstream); outstream.close(); if (success) { ContentValues values = new ContentValues(); values.put("album_id", track.getAlbumId()); values.put("_data", file); Uri newuri = res.insert(MediaUtils.sArtworkUri, values); if (newuri == null) { // Failed to insert in to the database. The most likely // cause of this is that the item already existed in the // database, and the most likely cause of that is that // the album was scanned before, but the user deleted the // album art from the sd card. // We can ignore that case here, since the media provider // will regenerate the album art for those entries when // it detects this. success = false; } } if (!success) { File f = new File(file); f.delete(); iterator.remove(); } } catch (FileNotFoundException e) { AQUtility.debug( "error creating file", e); } catch (IOException e) { AQUtility.debug( "error creating file", e); } } 


121: рд╕реНрдореГрддрд┐ рд╕реЗ рдмрд╛рд╣рд░

- рдЧреНрд░рд┐рдб рдХреЛ рдКрдкрд░ рдФрд░ рдиреАрдЪреЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ рдФрд░ рджреЛ рдЪреАрдЬреЗрдВ рдкрд╛рдПрдВ:
1. рдбрд░рд╛рд╡рдирд╛ рд▓реИрдЧреНрд╕ (рдпрд╣ рд╕рд╣реА рд╣реИ, рдЖрдкрдХреЛ рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)
2. рдореЗрдореЛрд░реА рд╕реЗ рдмрд╛рд╣рд░ (рдпрд╣ рднреА рд╕рдЪ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рдЙрдореНрдореАрдж рд╕реЗ рдереЛрдбрд╝рд╛ рдкрд╣рд▓реЗ рдкрдХрдбрд╝реЗ рдЧрдП, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рд╕реЗ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд░реВрдк рд╕реЗ рдЪреЛрд░реА рдХрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ)

121: LRU Cashe

- рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд░реНрдкрд┐рдд рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рдмрдирд╛рдПрдВ, рдЬреЛ рдЗрд╕реЗ рднрд░рддреЗ рд╣реА рдмрджрд▓ рдЬрд╛рдПрдЧрд╛

 // LruCache: http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html + int cacheSize = 20 * 360000; // <7MiB = 300width * 300heigth * 4bytesperpixel * 20images + LruCache bitmapCache = new LruCache(cacheSize) { + protected int sizeOf(int key, Bitmap value) { + return value.getRowBytes() * value.getHeight();//    + } + }; + + public void addBitmapToMemoryCache(int key, Bitmap bitmap) { + synchronized (bitmapCache) { + if (getBitmapFromMemCache(key) == null) { + bitmapCache.put(key, bitmap); + } + } + } + + public Bitmap getBitmapFromMemCache(int key) { + return (Bitmap) bitmapCache.get(key); + } 


- рдХреИрд╢ рд╕реЗ рдкрд╣рд▓реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рддрд╕реНрд╡реАрд░реЛрдВ рдХреЛ рдкрдврд╝реЗрдВ, рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рдХреИрд╢ рдореЗрдВ рдирдИ рддрд╕реНрд╡реАрд░реЗрдВ рдЬреЛрдбрд╝реЗрдВ

121: рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд░рдирд╛

рдкреНрд░реАрдореЗрдкреНрдЯрд┐рд╡ рдХреИрд╢ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рджреЛ рдЪреАрдЬреЗрдВ рд╣реБрдИрдВ:
1. рд╕реНрдореГрддрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдЧрд╛рдпрдм (рдЬреЛ рддрд╛рд░реНрдХрд┐рдХ рд╣реИ)
2. рд▓реЗрдХрд┐рди рдмреНрд░реЗрдХ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддреЗ рд╕рдордп рдмрдирд╛ рд░рд╣рд╛

- рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рдкрдврд╝реЗрдВ

121: onScrollStateChanged, onConfigurationChanged

- рдЙрд╕ рд╕рдордп рдЪрд┐рддреНрд░ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рдЕрдХреНрд╖рдо рдХрд░реЗрдВ, рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдХреНрд░реЙрд▓ "рд░реЛрд▓" рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд╣ рдЬрдбрд╝рддрд╛ рджреНрд╡рд╛рд░рд╛ "рд╣реЛрд╡рд░ рдХрд░рддрд╛ рд╣реИ"

- рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдУрд░рд┐рдПрдВрдЯреЗрд╢рди рдХреЛ рдмрджрд▓рддреЗ рд╕рдордп рдПрдбреЗрдкреНрдЯрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдПрдВ

 void applyAdapter() { if (tracks == null) return; adapter = new AdpArtworks(activity,tracks); int iDisplayWidth = getResources().getDisplayMetrics().widthPixels ; int numColumns = (iDisplayWidth / 310); gridView.setColumnWidth( (iDisplayWidth / numColumns) ); gridView.setNumColumns(numColumns); gridView.setStretchMode( GridView.NO_STRETCH ) ; gridView.setAdapter(adapter); gridView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { adapter.setScrollState(scrollState); if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) { adapter.notifyDataSetChanged(); } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } }); } 

121: рдбреНрд░рд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп 2 рдмрд┐рдЯрдореИрдк рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ, рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ

- рдПрдХ рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП xml рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХрдиреНрд╡рд░реНрдЯ
- рд╣рдо рдореЗрдиреВ рдореЗрдВ "рдкрд╣рд┐рдпрд╛" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдЕрдкрдбреЗрдЯ рдХреЙрд▓ рдХреЛ рд▓рдЯрдХрд╛рддреЗ рд╣реИрдВ

 + final Drawable imgBgr = activity.getResources().getDrawable(R.drawable.row_bgr); + final Bitmap bitmap = Bitmap.createBitmap(width, width, Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(bitmap); + imgBgr.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); + imgBgr.draw(canvas); + this.placeHolder = bitmap; 


121: рдбрд╛рдЙрдирд▓реЛрдб рдЗрдВрдбрд┐рдХреЗрдЯрд░
121: рдиреЛрдЯрд┐рд╕

- рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдкреНрд░рдЧрддрд┐ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдЧрддрд┐ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдкрд╛рдпрд╛ рдПрд▓реНрдмрдо рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред

рдФрд░ рдЕрдм рд╕реНрд▓рд╛рдЗрдбреНрд╕ рд╣реЛрдВрдЧреЗ!

рдЫрд╡рд┐

рдЫрд╡рд┐

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


All Articles