首页 > 系统相关 >Android 基于共享内存跨进程实时传输大量图片

Android 基于共享内存跨进程实时传输大量图片

时间:2023-09-27 15:00:55浏览次数:33  
标签:Log String processClientRequest ParcelFileDescriptor 传输 TAG Android 共享内存 pfd

 

aidl传输文件有大小1M限制,单次传输不适合传递大数据,可以使用aidl传递共享内存引用ParcelFileDescriptor方式传递图片信息。具体实现如下
一、service端
1.aidl文件IIpcService.aidl 定义,这里主要用到pfd参数
interface IIpcService {
/**
* Demonstrates some basic types that you can use as parameters
* and return values in AIDL.
*/
// void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
// double aDouble, String aString);
void register2Server(String packageName,IIpcServiceListener ipcServiceListener);
void unregister2Server(String packageName);
String processClientRequest(String packageName,String clientRequest,inout ParcelFileDescriptor pfd);
}
2.service端 处理客户端传递的ParcelFileDescriptor ,将获取的ParcelFileDescriptor转换成Bitmap 并回调给ui层显示
public String processClientRequest(String packageName, String clientRequest, ParcelFileDescriptor pfd) {

Log.i(TAG, "processClientRequest 11 packageName:" + packageName
+ " clientRequest:" + clientRequest + " pfd:" + pfd);
String ret = clientRequest;
FileDescriptor fileDescriptor = pfd.getFileDescriptor();
FileInputStream fis = null;
try {
fis = new FileInputStream(fileDescriptor);
Bitmap rawBitmap = BitmapFactory.decodeStream(fis);
ret += " process success!";
Log.i(TAG, "processClientRequest 112 rawBitmap:" + rawBitmap + " mUiShow:" + mUiShow);
if (null != mUiShow) {
mUiShow.showBitmap(rawBitmap);
}
} catch (Exception e) {
Log.i(TAG, "processClientRequest 22 error:" + e);
e.printStackTrace();
} finally {
try {
if (fis != null) {
fis.close();
}
} catch (IOException e) {
Log.i(TAG, "processClientRequest 33 error:" + e);
}
}

Log.i(TAG, "processClientRequest 22 end ret:" + ret);
return ret;
}
二客户端
客户端连接到service后,调用接口 传递图片文件引用 ParcelFileDescriptor
String path = "/sdcard/lilei/20230207161749238.jpg";
public ParcelFileDescriptor getPfd() {
ParcelFileDescriptor pfd = null;
try {
pfd = ParcelFileDescriptor.open(new File(path), MODE_READ_WRITE);
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
}
Log.i(TAG, "getPfd() pfd:" + pfd);
return pfd;
}

public String sendFile(String requestJson) {
Log.i(TAG, "sendFile() requestJson:" + requestJson);
if (null != mFtIpcManager) {
return mFtIpcManager.processClientRequest(requestJson, getPfd());
}
return "error";
}

标签:Log,String,processClientRequest,ParcelFileDescriptor,传输,TAG,Android,共享内存,pfd
From: https://www.cnblogs.com/adamli/p/17732729.html

相关文章

  • Xcode传输包报错Missing signing identifier at UnityFramework.framework/Framewor
    Missingsigningidentifierat"/var/folders/7v/qtz4nc7n4zv025173khwftsm0000gn/T/XcodeDistPipeline.~~~7SDZNJ/Root/Payload/SJSD.app/Frameworks/UnityFramework.framework/Frameworks/libswiftCore.dylib".ios集成unity项目传包报错:删除Frameworks/UnityFramework.......
  • Android上层WatchDog学习笔记_2
    一、简述1.了解WatchDog的原理,可以更好的理解系统服务的运行机制。二、WatchDog实现1.代码实现位置//frameworks/base/services/core/java/com/android/server/Watchdog.javapublicclassWatchdogextendsThread{...}可见Watchdog是一个线程。2.WatchDo......
  • 手机直播源码,Android 简单的弹框
    手机直播源码,Android简单的弹框   privatestaticString[]items=newString[]{      "拍照",      "从相册中选择",  }; AlertDialog.Builderbuilder=newAlertDialog.Builder(MainActivity.this)        .setTitle(......
  • 直播app开发搭建,Android studio 图片压缩
    直播app开发搭建,Androidstudio图片压缩获取图片目录 Filefile=Environment.getExternalStorageDirectory();//获取根路径storage/emulated/0Stringpath1=file.getPath()+"/Pictures/1655215651628.jpg";//Pictures文件夹下面的1655215651628.jpg图片名 ​例   ......
  • Android Sample 之 Tab 和 Navigation
    Sample中,Tab在上,Navigation在下,后者有图标。不理解为什么用不同的名称。之前没有区分,混淆模糊。 搜索发现有人在stackoverflow问。有人答曰:区别在于 Tab是同一主题,而 Navigation可用于不相关的主题。 Tabsareconsideredtoberelatedtoeachotherwhere......
  • 【Android面试】2023最新面试专题二:ArrayList篇
    1.4 请说一说ArrayList如何保证线程安全,除了加关键字的方式?这道题想考察什么?1、ArrayList的底层原理?考察的知识点ArrayList底层的源码的理解考生如何回答ArrayList如何保证线程安全继承Arraylist,然后重写或按需求编写自己的方法,这些方法要写成synchronized,在这些synchronized的......
  • Android动画-1——Android三种动画详解
    一、前言1.Android的三种动画,即:ViewAnimation(视图动画)DrawableAnimation(帧动画)PropertyAnimation(属性动画) 二、ViewAnimation(视图动画)1.View动画的概述及种类视图动画的作用对象是View,支持四种动画效果,分别是平移、缩放、旋转、透明度。譬如,我们可以对TextView设......
  • android adb调试
    1、无线方式一cd/dD:\Android\sdk\platform-toolstcpip5555(需手机线下连接执行)adbconnect192.168.0.1402、无线方式二cd/dD:\Android\sdk\platform-toolsadbpair192.168.0.140:42319adbconnect192.168.0.140:40717 ......
  • Android Flutter 混合开发高仿大厂App
    自上篇 Flutter10天高仿大厂App及小技巧积累总结 的续篇,这次更是干货满满。这篇文章将概述 Android组件化的架构搭建 及 Flutter 和 Android 如何混合开发 (整个App只有首页是用原生Android完成,其他页面都是引入之前的做好的Flutter页面) ,主宿主程序由Android搭建,采用......
  • nc命令,扫描端口,文件传输
    nc是netcat的简写,是一个强大的网络工具作用:实现任意tcp/udp端口的侦听,nc可以作为server以tcp或udp方式侦听指令端口端口扫描,nc可以作为client发起tcp或udp连接机器间传输文件机器间网络测速 使用示例:1.验证某ip 的80端口通不通nc -zv 192.168.66.680 返回......