小工具知识网

当前位置: 首页 > 行业知识 > Android Intent 传递数据过大问题

行业知识

Android Intent 传递数据过大问题

2026-11-15 22:53:57 来源:互联网转载

/**

()

��                    * 通过Intent传递或者返回的数据是存放在一个叫做Binder transaction buffer的缓存区,这个缓冲区的大小为1Mb(Android 28 Platform),当缓冲区不够用时就会抛出异常

                     * 如果有多个数据传递同时进行,是共用缓冲区的1Mb,而不是每一个传输各分配1Mb缓存。这就有可能当多个传输同时进行时,数据大小小于1M还是抛出TransactionTooLargeException异常

()

                     * 建议的解决方法就是尽可能减小传输的数据,至于具体要多效合上也没个具体的数值,也不可能知道,因为并发传输的数量不固定,但是至少可以肯定的是超过1M肯定会抛异常

                     *

                     * 解决方法

                     * 根据官方的建议就是减小传输的数据大小,或者拆分数据分次传输,但是如果数据量真的很大且需一次性传输有没解决方法呢,当然有

                     *

                     * 数据保存到static全局变量中

                     *

                     * 数据保存到本地存储中,比如本地文件或数据库,在目标Activity中再提取出来

                     *

                     * 通过EventBus.postSticky传递包含传递数据的粘性事件,在目标Activity中接收该事件提取数据

                     */

 

//在第一个activity中:     EventBus.getDefault().register(this); String listBeansJson = new Gson().toJson(list);                    List detailBeans = new Gson().fromJson(listBeansJson, new TypeToken() {                    }.getType());                    EventBus.getDefault().postSticky(detailBeans);    @Override    public void onDestroy() {        super.onDestroy();        EventBus.getDefault().unregister(this);    }=================分割线=================//第二个activity中接收数据:EventBus.getDefault().register(this);//通过EventBus监听数据变化 获取数据   @Subscribe(threadMode = ThreadMode.MAIN,sticky = true)    public void  getPaintingDetailListData(List detailBeans){        paintingDetailBeanList = detailBeans;//        coverAdapter.notifyDataSetChanged();        publicPaintingFullViewPagerAdapter = new PublicPaintingFullViewPagerAdapter();        List fullViews = new ArrayList();        if(paintingDetailBeanList!=null){            for (NewPublicPaintingDetailBean listBean : paintingDetailBeanList){                PublicPaintingFullView publicPaintingFullView = new PublicPaintingFullView(NewPaintingDetailPageActivity.this);                publicPaintingFullView.setOnPublicPaintingFullViewListener(this);                publicPaintingFullView.setData(listBean);                fullViews.add(publicPaintingFullView);            }            publicPaintingFullViewPagerAdapter.setPaintingListModels(fullViews);            view_pager_fullview.setAdapter(publicPaintingFullViewPagerAdapter);            view_pager_fullview.setCurrentItem(showPosition);        }    } @Override    protected void onDestroy() {        super.onDestroy();        EventBus.getDefault().unregister(this);}

上一篇:苹果CMS登录系统设置详解,轻松掌握设置步骤,轻松上手!

下一篇:UTF-8编码详解,重点知识一网打尽