不使用ipc 实现 Activity与Service双向通信

原创 2017年06月21日 17:20:31
//直接上代码  Service :

public class UploadPictureService extends Service{

    public static final String PATH_KEY = "sdcard_path_list";

    private ArrayList<String> picturePaths;

    private ServiceBinder mBinder;

    private String TAG = UploadPictureService.class.getName();

    public interface IUploadFinishListener {
        void onUploadFinished(ArrayList<String> jdImgUrls);
    }

    public class ServiceBinder extends Binder {
        IUploadFinishListener callBack;
        public void keepCallback(IUploadFinishListener cb){
           callBack = cb;
        }

        public void businessFinished(){
            stopSelf();
        }
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        picturePaths = intent.getStringArrayListExtra(PATH_KEY);
        mBinder = new ServiceBinder();
        return mBinder;
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        picturePaths = intent.getStringArrayListExtra(PATH_KEY);
        uploadPicture();
        return super.onStartCommand(intent, flags, startId);
    }

    private void uploadPicture(){
        // 在这里做实质性的事情
        
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }
}

//Activity
...
    /**
     * 
     */
    private void uploadPictureByService(ArrayList<String> pathStrings){
        Intent intent = new Intent(this, UploadPictureService.class);
       
        bindService(intent, new ServiceConnection() {
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                UploadPictureService.ServiceBinder binder = (UploadPictureService.ServiceBinder) service;
                binder.keepCallback(new ServiceFinishCallback(binder));
            }

            @Override
            public void onServiceDisconnected(ComponentName name) {
            }
        },0);

        intent.putExtra(UploadPictureService.PATH_KEY,pathStrings);
        startService(intent);
    }

    static class ServiceFinishCallback implements UploadPictureService.IUploadFinishListener {

        UploadPictureService.ServiceBinder binder;

        ServiceFinishCallback(UploadPictureService.ServiceBinder binder) {
            this.binder = binder;
        }

        @Override
        public void onUploadFinished(ArrayList<String> jdImgUrls) {
            //

            //if dispose finished
            binder.businessFinished();
        }
    }
...






相关文章推荐

android service与activity双向通信

前些日子在做音乐播放器的例子,在做的过程中要涉及到service 与activity之间的交互,于是乎就在网上搜罗例子,例子确实很多,但是涉及到他俩之间互相交互的例子就少了。于是乎决定把自己的例子写下...

Android Service和Activity基于串口蓝牙模块的双向通信【第二篇】

一直以来都想利用手机来控制一些东西,比如电灯,电风扇等家电或者智能小车等. 驱动蓝牙模块可以在Activity中直接调用,也可以在多线程下直接使用,但这样会存在一个缺陷:当你按下手机的Home或者B...

android中activity与service的双向通信

1:在onResume()方法中绑定服务,即调用bindService方法,bindService方法会调用
  • hfsime
  • hfsime
  • 2014年09月20日 20:38
  • 173

Android Service与Activity双向通信的两种方式

本博客只讲述同一个进程中activity和Service的通信,进程间通信可以使用AIDL,后续博客更新.关于Service的认识service是一种组件,不是单独的线程或者进程,它属于UI线程,只不...

Android中通过Messenger与Service实现进程间双向通信

转载博客原文:http://blog.csdn.net/iispring/article/details/48329925 Android中的Service和其调用者既可以在同一个App中,也可...

Android Service详解(七)---绑定服务BoundService详解之Messenger双向通信的实现

Android Service详解(七)---绑定服务BoundService详解之Messenger双向通信的实现 这是第七篇文章主要讲的是BoundService中用Messenger实现IP...

JavaSE第一百一十讲:使用线程实现服务器端与客户端的双向通信

在上一讲中我们讲到了服务器端与客户端的双向通信的例子,显然这种双向通信不是非常好,因为服务端与客户端建立连接之后,服务端一定要等待客户端的输入然后自己再返回一个输出,这在实际的开发过程显然是没有任何意...

稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)

[索引页] [源码下载] 稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service) 作者:webabcd 介绍 ...

c++实现的双向通信的socket小程序

  • 2017年06月05日 19:00
  • 337KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:不使用ipc 实现 Activity与Service双向通信
举报原因:
原因补充:

(最多只允许输入30个字)