рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо Android IPC рдореЗрдВ AIDL рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред
рдЗрд╕рдореЗрдВ рдПрдХ рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЙрджрд╛рд╣рд░рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИред
рд▓реЗрдЦ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
- рд░рд┐рдореЛрдЯ рдПрдВрдбреНрд░реЙрдЗрдб рд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдФрд░ рдПрдЖрдИрдбреАрдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдгред
- рдЙрдкрдпреЛрдЧреА рдХреЛрдб рдЙрджрд╛рд╣рд░рдгред
- рдПрдВрдбреНрд░реЙрдЗрдб рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкрд░ рдореБрдЦреНрдп рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреВрд░реА рддрд░рд╣ рд╕реЗ (рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рд▓рд┐рдВрдХ рджреЗрдЦреЗрдВ)ред
рдореВрд▓ рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдБ
рд╕реЗрд╡рд╛ рдПрдХ рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдмрд┐рдирд╛ рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдПрдХ рдШрдЯрдХ рд╣реИ, рдЬрд┐рд╕реЗ рд╕рдВрд╕рд╛рдзрди-рдЧрд╣рди рдФрд░ / рдпрд╛ рд▓рдВрдмрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
Android рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдкреНрд░рдХрд╛рд░
- рдкреНрд░рд╛рд░рдВрдн - рдРрд╕реА рд╕реЗрд╡рд╛рдПрдБ рдЬреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдШрдЯрдХ (рдЧрддрд┐рд╡рд┐рдзрд┐, BrodcastReceiver, рд╕реЗрд╡рд╛) рджреНрд╡рд╛рд░рд╛ рд▓реЙрдиреНрдЪ рдХреА рдЬрд╛рддреА рд╣реИрдВ рдФрд░ рддрдм рддрдХ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рд╡реЗ рдЦреБрдж рдХреЛ рд░реЛрдХ рдирд╣реАрдВ рд▓реЗрддреА рд╣реИрдВ рдпрд╛ рдХреЛрдИ рдЙрдиреНрд╣реЗрдВ рд░реЛрдХ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред
- рдмрд╛рдЙрдВрдб (рд╕рдВрдмрдВрдзрд┐рдд) - рдПрдХ рд╕реЗрд╡рд╛ рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИред рдРрд╕реА рд╕реЗрд╡рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдШрдЯрдХ рд╕реЗ рдкрд╣рд▓реЗ рдХрдиреЗрдХреНрд╢рди (рдЕрдиреБрд░реЛрдз) рдкрд░ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИред рдЕрдВрддрд┐рдо рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдкрд░ рд╕реЗрд╡рд╛ рдмрдВрдж рд╣реЛ рдЬрд╛рддреА рд╣реИред
- рдПрдХ рд╕реЗрд╡рд╛ рдкреНрд░рд╛рд░рдВрдн рдФрд░ рдмрд╛рдзреНрдп рджреЛрдиреЛрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред рдРрд╕реА рд╕реЗрд╡рд╛ "рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП" рд░рд╣рдиреЗ рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред
рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕реЗ рдЕрд▓рдЧ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХ рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдлрд╛рдпрджреЗ:
- рдЕрдзрд┐рдХрддрдо рдореЗрдореЛрд░реА рдХрд╛ рдЖрдХрд╛рд░ 2 рдЧреБрдирд╛ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 32 рдПрдордмреА / рдкреНрд░рдХреНрд░рд┐рдпрд╛ (рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ)ред
- рдпрджрд┐ рдЖрдк 2 рдПрдордмреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде 1 рдПрдордмреА рдФрд░ 2 * рдПрди рдПрдордмреА рд╕реНрдиреИрдкрд╢реЙрдЯ рдХреЗ рд╕рд╛рде рдЬреАрд╕реА рдХрдо рдЖрдХреНрд░рд╛рдордХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
- Android рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдорд╛рдирдХ рд▓рд╛рдн: рдкреГрд╖реНрдарднреВрдорд┐, рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░рддрд╛, рдЖрджрд┐ред
рдиреБрдХрд╕рд╛рди:
- рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдХреНрд░рдорд╛рдВрдХрди рдФрд░ рдбреАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд┐рд╕реНрдЯрдо рд╕рдВрд╕рд╛рдзрдиред
- рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
- рдереЛрдбрд╝рд╛ рдФрд░ рдХреЛрдбред
AIDL
рд╢рд╛рдмреНрджрд┐рдХ рдЕрдиреБрд╡рд╛рдж рдореЗрдВ - рдПрдВрдбреНрд░реЙрдЗрдб рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ред рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕реАрдзреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдУрдПрд╕ рдЖрджрд┐рдо рдореЗрдВ рдЬрд╛рд╡рд╛ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдЕрдкрдШрдЯрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдЖрдИрдбреАрдПрд▓ рдлрд╛рдЗрд▓реЗрдВ рдЕрдкрд╡рд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рд╡рд╛ рдореЗрдВ рдорд╛рдирдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рдорд╛рди рд╣реИрдВ:
- рдЖрдкрдХреЛ рдЙрди рд╕рд╣рд╛рдпрдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рднреА рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╣реА рдкреИрдХреЗрдЬ рдореЗрдВ рд╣реИрдВред
- рд╢реВрдиреНрдп рд╡рд┐рдзрд┐ рдШреЛрд╖рдгрд╛ рдореЗрдВ рдСрдирд╡реЗ рдХреАрд╡рд░реНрдб рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ (рдХреНрд▓рд╛рдЗрдВрдЯ рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред
- рдХреЗрд╡рд▓ рдкреНрд░рд╛рдердорд┐рдХ рд╕рд╛рдордЧреНрд░реА, рд╕реНрдЯреНрд░рд┐рдВрдЧ, рд╕реВрдЪреА, рдФрд░ рдЕрдиреНрдп рд╕рд╣рд╛рдпрдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдШреЛрд╖рд┐рдд рдкрд╛рд░реНрд╕рд▓рдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
AIDL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, java рдХреЛрдб рд╕реНрдЯреИрдм рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдГ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛
рд╣рдордиреЗ рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреИрд▓рд░реА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдореЗрдореЛрд░реА рдХрд╛рд░реНрдб рдФрд░ рдлреЛрдЯреЛ-рд╢реЗрдпрд░рд┐рдВрдЧ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рддрд╕реНрд╡реАрд░реЗрдВ рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕реЗрд╡рд╛ рдХреЗ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рд╣реИрдВ: рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ (рдПрд▓реНрдмрдореЛрдВ, рдлрд╝реЛрдЯреЛ, рджреЛрд╕реНрддреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА), рдЙрдирдХреЗ рдЕрдкрдбреЗрдЯ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реА рд╣рд░ рдЪреАрдЬред рд╕реЗрд╡рд╛ рд▓рдЧрд╛рддрд╛рд░ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд╕рдордп рддреИрдпрд╛рд░ рд╣реИред
рдиреАрдЪреЗ рдХреЛрдб рдХреЗ рдкреНрд░рдореБрдЦ рдЦрдВрдб рд╣реИрдВ рдФрд░ рдПрдХ рдЖрджрд┐рдо рд╕реЗрд╡рд╛ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдЖрдИрдбреАрдПрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реЗрд╡рд╛ рдФрд░ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рдмреАрдЪ рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
IDataSourceService.aidl - рд╕реЗрд╡рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕:
packagecom.umobisoft.habr.aidlexample.common; import com.umobisoft.habr.aidlexample.common.IDataSourceServiceListener; interfaceIDataSourceService{ voidloadAlbums(in IDataSourceServiceListener listener); тАж }
IDataSourceServiceListener.aidl - рд╕реЗрд╡рд╛ рд╕реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕:
package com.umobisoft.habr.aidlexample.common; import com.umobisoft.habr.aidlexample.common.pojo.Album; interface IDataSourceServiceListener{ oneway void albumItemLoaded(in Album a); }
рдбреЗрдЯрд╛ рджреЛ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдкрд╛рд░реНрд╕рд▓реЗрдмрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ - рдПрд▓реНрдмрдо рдФрд░ рдлреЛрдЯреЛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдЗрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрддрд╛ рдлрд╛рдЗрд▓реЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЬрдм OS рдЖрджрд┐рдо рд╕реЗ рдЬрд╛рд╡рд╛ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдирд┐рд░реНрдорд╛рддрд╛ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдбреЗрдЯрд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╛рд░реНрд╕рд▓реЗрдмрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд░рд╛рдЗрдЯ рдЯрд╛рдЗрдк рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
@Override public void writeToParcel(Parcel out, int flags) { try{ out.writeLong(id); out.writeString(name); out.writeTypedList(photos); }catch (Exception e) { Log.e(TAG, "writeToParcel", e); } }
рдПрдХ рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд░реНрдгрди рднреА рд╣реИ, рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдп рд╡рд╕реНрддреБ рдХреЗ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ / рдЕрд╡рд╕реНрдерд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд░рдорд╛рдВрдХрди рдФрд░ рд╡рд┐рдЪрд▓рди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
@Override public int describeContents() {
рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреА рд╡рд┐рдзрд┐рдпрд╛рдБ рдЙрдиреНрд╣реЗрдВ рдкрд╛рд░реНрд╕рд▓реЗрдмрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рдЕрдпреЛрдЧреНрдп рд╣реИрдВ, рд▓реЗрдХрд┐рди рдорд╛рдирдХ рдЕрднреНрдпрд╛рд╕ рдХреНрд░рд┐рдПрдЯрд░ рдХреЛ рдПрдХ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ:
private void readFromParcel(Parcel in) { try{ id = in.readLong(); name = in.readString(); photos.clear(); in.readTypedList(photos, Photo.CREATOR); }catch (Exception e) { Log.e(TAG, "readFromParcel", e); } }
рдЧрддрд┐рд╡рд┐рдзрд┐ рдСрдирдХреНрд░рд┐рдПрдЯ рд╡рд┐рдзрд┐ рдореЗрдВ рд╕реЗрд╡рд╛ (рдЗрд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛) рд╢реБрд░реВ рдХрд░рддреА рд╣реИ
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); textView = (TextView)findViewById(R.id.album_text); Intent serviceIntent = newIntent(this, DataSourceService.class); startService(serviceIntent); connectToService(); }
рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рдПрдХ рд╣реА рдЪрд░рдг рдореЗрдВ, рдпрд╣ рд╕реЗрд╡рд╛ рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИ:
private void connectToService() { Intent intent = newIntent(this, DataSourceService.class); this.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE); }
рд╕реЗрд╡рд╛ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реИ, рдпрд╣ ServiceConnection рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИред рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреЗ рджреМрд░рд╛рди IDataSourceServiceListener.Stub рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рд╕рдВрджреЗрд╢ рд╢реНрд░реЛрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрд╡рд╛ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
private ServiceConnection serviceConnection = newServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { Log.i(TAG, "Service connection established"); serviceApi = IDataSourceService.Stub.asInterface(service); try { mainListener = newIDataSourceServiceListener.Stub() { @Override publicvoidalbumItemLoaded(final Album a) throwsRemoteException { mToastHandler.post(new Thread(){ publicvoid run(){ Toast.makeText(HabrahabrAIDLExampleActivity.this, a.toString(), Toast.LENGTH_LONG).show(); textView.setText(a.toString()); } }); } }; serviceApi.loadAlbums(mainListener); } catch (RemoteException e) { Log.e(TAG, "loadAlbums", e); } } @Override publicvoidonServiceDisconnected(ComponentName name) { Log.i(TAG, "Service connection closed"); serviceApi = null; connectToService(); } };
рдЬрдмрдХрд┐ StartedService рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдЕрдЧрд░ рдореБрдлреНрдд рдореЗрдореЛрд░реА рдХреА рдорд╛рддреНрд░рд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реАрдорд╛ рддрдХ рдШрдЯ рдЬрд╛рддреА рд╣реИ, рддреЛ рд╕рд┐рд╕реНрдЯрдо рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рдмрд┐рдирд╛ рд╕реЗрд╡рд╛ рдХреЛ рдорд╛рд░ рд╕рдХрддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╕реЗрд╡рд╛ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, onServiceDisconnected рдкрджреНрдзрддрд┐ рдореЗрдВ, рд╣рдо рдлрд┐рд░ рд╕реЗ рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВред
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реНрд░реЛрдд рдХреЛрдб рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдПрдЖрдИрдбреАрдПрд▓ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗред рд╕рдВрдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдЧреНрд░рд╣
рдпрд╣рд╛рдВ рд╣реИ ред
рдПрдВрдбреНрд░реЙрдЗрдб рдорд╛рд░реНрдХреЗрдЯ рдореЗрдВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЙрдкрд▓рдмреНрдз рд╣реИред
AndroidDevelopers рдкрд░ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреНрд░рд▓реЗрдЦрди:
рд╕реЗрд╡рд╛рдПрдБ:
developer.android.com/guide/topics/fundamentals/services.htmlAIDL:
developer.android.com/guide/developing/tools/aidl.html