android播放器(music player)源码分析1-Service,Binder,ServiceConnection
?
public class MediaPlaybackActivity extends Activity implements MusicUtils.Defs, View.OnTouchListener, View.OnLongClickListener{ private IMediaPlaybackService mService = null; @Override public void onStart() { super.onStart(); ...................//其他代码 if (false == MusicUtils.bindToService(this, serviecConnection)) { // something went wrong ...................//其他代码 } private ServiceConnection serviecConnection = new ServiceConnection() { public void onServiceConnected(ComponentName classname, IBinder obj) { mService = IMediaPlaybackService.Stub.asInterface(obj); if (MusicUtils.sService == null) { MusicUtils.sService = mService; ...................//其他代码 } } public void onServiceDisconnected(ComponentName classname) { } };}//MusicUtils类:定义了播放器所需要的操作以及service和Activity之间的相互作用的操作public class MusicUtils { ...................//其他代码 public static boolean bindToService(Context context, ServiceConnection callback) { context.startService(new Intent(context, MediaPlaybackService.class)); ServiceBinder sb = new ServiceBinder(callback); sConnectionMap.put(context, sb); return context.bindService((new Intent()).setClass(context, MediaPlaybackService.class), sb, 0); } ...................//其他代码 }?
?
需要注意:
远程服务往往不只是传递java基本数据类型。这时需要注意android的一些限制和规定:
?? 以下转自http://yangguangfu.iteye.com/blog/699306
1. android支持String和CharSequence
2. 如果需要在aidl中使用其他aidl接口类型,需要import,即使是在相同包结构下;
3. android允许传递实现Parcelable接口的类,需要import;
4.?android支持集合接口类型List和Map,但是有一些限制,元素必须是基本型或者上述三种情况,不需要import集合接口类,但是需要对元素涉及到的类型import;
非基本数据类型,也不是String和CharSequence类型的,需要有方向指示,包括in、out和inout,in表示由客户端设置,out表示由服务端设置,inout是两者均可设置。
?