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

来源:互联网 发布:php kahlan 编辑:程序博客网 时间:2024/05/28 14:57
//直接上代码  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();        }    }...




原创粉丝点击