Android使用线程锁来控制特殊流程

2020-03-13  本文已影响0人  sgfb

在Android中有些事件的流程是指定类中的回调,例如Activity返回Activity.onActivityResult
所以在写一些封装的时候必须有指定流程,例如封装一个启动照相机并且获取返回的照片,形式应该会是:
启动照相机ImageUtils.openCamera,
然后在当前的Activity.onActivityResult再调用ImageUtils.parserResultImage。

使用锁后流程图

流程图

关键点是在startActivityForResult后上锁等待onActivityResult,在onActivityResult保存数据到指定位置后激活原线程即可继续业务,中间等待部分可以被封装隐藏具体实现使得业务流程是从上到下直行的

代码示例

    /**
     * 启动另一个Activity并且显示返回,这个方法是运行在工作线程中的
     */
    private void waitSecondActivityResultAndShowResult(){
        //启动另一个Activity
        startActivityForResult(new Intent(DemoActivity.this,SecondActivity.class),REQ_SECOND);
        //上锁
        synchronized (lock){
            try {
                lock.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        //被解锁后获取Activity返回显示
        System.out.println("second activity result:"+mData);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==REQ_SECOND&&resultCode==RESULT_OK){
            //将Activity返回赋给mData
            mData=data.getStringExtra(SecondActivity.RES_STR_TEST);
            //解锁
            synchronized (lock){
                lock.notify();
            }
        }
    }
上一篇 下一篇

猜你喜欢

热点阅读