EventBus
EventBus是一款针对Android优化发布的总线程。
其主要功能是替代Intent、handler、broadCast在Fragment、Activity、Service、线程之间传递消息,代码更优雅。以及将发送者和接受者解耦。
Binder
Binder采用了面向对象的思想。
- 通常意义下,Binder指的是一种通讯方式;我们说AIDL使用Binder进行通信,指的就是Binder这种机制。
- 对于Server而言,Binder指的是Binder本地对象。
- 对于Cilent而言,Binder只是一个Binder代理对象
- 对于传输过程而言,Binder是可以进行跨进程传递的对象;Binder驱动会对具有跨进程传递能力的对象做特殊处理:自动完成代理对象和本地对象的转换。
Service
举例说话
- 定义一个MyService继承Service,重写三个方法
public class MyService extends Service {
private String TAG = "MyService";//log标志符
private DownloadBinder mBinder = new DownloadBinder();
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
// TODO: Return the communication channel to the service.
// throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG,"onCreate!");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG,"onStartCommand!");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG,"onDestroy!");
}
}
- 定义一个DownloadBinder继承Binder
public class DownloadBinder extends Binder{
private String TAG = "MyService";
public void startDownLoad(){
Log.d(TAG,"startDownLoad");
}
public int getProgress(){
Log.d(TAG,"getProgress");
return 0;
}
}
- 最后在MainActivity中运用我们的服务
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private Button start_btn;
private Button stop_btn;
private Button bind_btn;
private Button unbind_btn;
//通过Binder,我们可以在活动中随时随地的控制服务了
private DownloadBinder downloadBinder;
//创建ServiceConnection匿名类,重写onServiceConnected和onServiceDisconnected方法
private ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
downloadBinder = (DownloadBinder) service;
downloadBinder.startDownLoad();
downloadBinder.getProgress();
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
start_btn = (Button) findViewById(R.id.start_btn);
stop_btn = (Button) findViewById(R.id.stop_btn);
bind_btn = (Button) findViewById(R.id.bind_btn);
unbind_btn = (Button) findViewById(R.id.unbind_btn);
start_btn.setOnClickListener(this);
stop_btn.setOnClickListener(this);
bind_btn.setOnClickListener(this);
unbind_btn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.start_btn:
Toast.makeText(this,"start_btn",Toast.LENGTH_SHORT).show();
//启动服务
Intent startIntent = new Intent(this,MyService.class);
startService(startIntent);
break;
case R.id.stop_btn:
//停止服务
Intent stopIntent = new Intent(this,MyService.class);
stopService(stopIntent);
break;
case R.id.bind_btn:
Intent bindIntent = new Intent(this,MyService.class);
bindService(bindIntent,connection,BIND_AUTO_CREATE);//绑定服务
break;
case R.id.unbind_btn:
Intent unbindIntent = new Intent(this,MyService.class);
unbindService(connection);//解绑服务
break;
default:
break;
}
}
}
代码示例参照《Android第一行代码》
HashMap中的containsKey()
boolean containsKey(Object key)
判断map是否包含指定的key