安全地在Android进程之间即时传递大文件

时间:2015-01-14 19:01:09

标签: android sockets pipe android-contentprovider named-pipes

  SourceNode --|                                  |--> StorageLocation     (remote)
               |--> MyService <-ipc-> CallerApp --|                        (Android)
手机内有

MyServiceCallerApp; StorageLocation可能位于手机内部,也可能位于手机外部的另一个远程节点。方案如下:

  1. CallerApp通过AIDL告诉Android服务获取文件X;文件X非常大。
  2. MyService已连接到远程SourceNode并开始从该远程节点接收X.
  3. 现在,当MyService从SourceNode接收X时,它需要在读取时将读取的字节传递给CallerApp。
  4. 结论:数据从左边的SourceNode一直到右边的StorageLocation,同时将手机用作代理。 MyService和CallerApp是不同的流程。
  5. 这里的问题是如何有效地在MyService和CallerApp之间进行IPC。在某些情况下,文件X将本地保存在CallerApp的专用存储上。在其他情况下,文件X将被发送到远程存储位置,并且电话在某种程度上用作传输的代理。您可以将StorageLocation视为本地电话存储或远程云提供商。

    • 我使用pipe pairtransfer thread尝试使用与this one类似的方法,但我在高端手机上获得的速度超过5 KB /秒在MyService和CallerApp之间传输数据。如果传输数百MB,这太慢了。
    • 我考虑使用ContentProvider,但根据我的理解文件,X必须首先保存到MyService中,然后CallerApp才能使用它。文件X无法首先保存到MyService中,然后传递到CallerApp,因为它可能非常大,甚至无法适应可用的存储空间(在这种情况下,手机只是数据的代理)。 / LI>
    • Haven没有试过local sockets,但如果管道对很慢,我不知道它会不会更好。

    有关如何解决此问题的任何见解,即有效地在MyService和CallerApp之间传输大量数据?

    (另外,我可以直接从MyService写入CallerApp 的私有存储位置而不用使用管道对作为中介,即MyService将从SourceNode套接字读取并写入一个OutputStream句柄在CallerApp中创建的文件?)

0 个答案:

没有答案