Android随笔 2017-2-16

EventBus

EventBus是一款针对Android优化发布的总线程。
其主要功能是替代Intent、handler、broadCast在Fragment、Activity、Service、线程之间传递消息,代码更优雅。以及将发送者和接受者解耦。

Binder

Binder采用了面向对象的思想。

  • 通常意义下,Binder指的是一种通讯方式;我们说AIDL使用Binder进行通信,指的就是Binder这种机制。
  • 对于Server而言,Binder指的是Binder本地对象。
  • 对于Cilent而言,Binder只是一个Binder代理对象
  • 对于传输过程而言,Binder是可以进行跨进程传递的对象;Binder驱动会对具有跨进程传递能力的对象做特殊处理:自动完成代理对象和本地对象的转换。

Service

举例说话

目录.png
  • 定义一个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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,876评论 25 709
  • 原文:http://weishu.me/2016/01/12/binder-index-for-newer/ 要点...
    指尖流逝的青春阅读 2,629评论 0 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,288评论 19 139
  • 毫不夸张地说,Binder是Android系统中最重要的特性之一;正如其名“粘合剂”所喻,它是系统间各个组件的桥梁...
    weishu阅读 17,982评论 29 246
  • 本周的感悟片段。每一段是我遇到一件事情当时记录的感悟,逻辑性不好,都不好意思给你们看了。下面是文章 感激内心充满感...
    万康阅读 255评论 2 0