如何解决本地大批量数据的更新,和后台的同步,讲解socket的IPC和socket的通讯

本文探讨了在Android开发中如何处理本地大批量数据更新并同步到后台,主要聚焦于Socket的IPC进程通信和数据传输。介绍了线程间通信的几种方式,如管道、共享内存和Handler,以及进程间通信的Socket机制,特别是AF_UNIX Socket在本地通信中的优势。文章还提到了端口转发和UNIX Domain Socket在跨设备通信中的应用。
摘要由CSDN通过智能技术生成

Android的功夫,在Android之外。

这句话我很认同,Android Framework只不过是对底层系统的封装,要想深入理解它,必须熟悉JNI、读得懂C++、理解Java虚拟机、Linux系统甚至汇编、指令集等等。但是并不意味这你作为一个开发就一定都得会这些,我相信等你学完上述那些知识,可能已经换一个操作平台了,当然如果你真的掌握了这些,下一代操作系统是什么已经不重要了。今天我们要讲的知识点虽然是为了解决当下要解决的问题,但是追根溯源其实是java,甚至是网络协议,C++,等层面的知识,但知识都是触类旁通的。

        说这个问题首先我先说下这个业务的使用场景。随着互联网的发展进入了下半场,有以前的app大而且多的局面满满的走向精而细的划分,每一个app的如何基于大数据统计用户行为是衡量一款产品的优劣标准之一,因为这些数据驱动老板、产品、市场、运营的业务决策,深度了解你的用户行为,评估营销效果,优化产品体验,提升运营效率,在探索不同业务的关键行为中,洞察指标背后掩藏的故事。对产品的定位和改进是非常重要的因素,接下来我就围绕我们开发无埋点统计中遇到的问题跟大家交流产品的统计数据遇到的解决方案:

  • 本博客不介绍如何实现无埋点统计,这里我讲的是数据的处理,至于无埋点如何插桩,这个点不是今天我们要讨论的,以后有机会可以跟大家详细的分享安卓AOP的相关知识点
  • 如何实现后台与前端的界面统一,可以再web端动态的控制选择埋点,这个在以前的博文稍微有介绍:就是频繁的截屏
  • 基于第二个问题,频繁的截屏必然产生大量的数据,数据如何进行通讯

今天的文章就是围绕第三个问题进行的拓展和延伸

本地截屏的大量数据如何进行传输:

思路:

  1. 因为产品在开发完版本以后让老板、产品、市场、运营可以再后端web端动态控制,他们不懂程序,只知道图形化的操作,那么我们需要把这个app界面的图形化操作传到服务器,让其进行选择,可以通过本地的adb命令Socket的IPC进程通信完成但是这里的局限性是手机和服务器是不同的机器,如何通信?
  2. 可能有人说socket可以支持TCP/IP通信,是的,没问题,如果仅仅是这个问题那么也没有必要写博客了,今天主要是要根据这个我们能不能做成socket如何通过IPC完成数据的上传工作

围绕这个问题之前我们先回顾下一些知识点:

 

首先说下线程间通信的几种方式:

1:使用管道流Pipes

“管道”是java.io包的一部分。它是Java的特性,而不是Android特有的。一条“管道”为两个线程建立一个单向的通道。生产者负责写数据,消费者负责读取数据。

public class SecAct extends Activity {

    private static final String TAG = "PipeExampleActivity";
    private EditText editText;

    PipedReader r;
    PipedWriter w;

    private Thread workerThread;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sec);

        r = new PipedReader();
        w = new PipedWriter();

        try {
            w.connect(r);
        } catch (IOException e) {
            e.printStackTrace();
        }
        editText = (EditText) findViewById(R.id.edit_text);
        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) {
            }

            @Override
            public void onTextChanged(CharSequence charSequence, int start, int before, int count) {
                try {
                    if (count > before) {
                        w.write(charSequence.subSequence(before, count).toString());
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void afterTextChanged(Editable editable) {
            }
        });

        workerThread = new Thread(new TextHandlerTask(r));
        workerThread.start();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        workerThread.interrupt();
        try {
            r.close();
            w.close();
        } catch (IOException e) {
        }
    }

    private static class TextHandlerTask implements Runnable {
        private final PipedReader reader;

        public TextHandlerTask(PipedReader reader) {
            this.reader = reader;
        }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值