2 qq 21940627 qq_21940627 于 2016.03.28 17:56 提问

Android两个子线程同步问题

现在Android端有这么一个需求,将Android的屏幕不停地截图然后通过Socket发送,现在希望能将截图和发送分为两个线程,有没有哪位能教教我啊,因为刚做Android没有多久,最好能有一个小Demo讲解一下,例如一边截图,一边保存的Demo,非常感谢;

5个回答

cckker
cckker   2016.03.30 19:47
已采纳

建立一个的消息队列做图片顺序控制和数据缓冲,截图线程截图后把截图(对象或者图片路径)从队尾插入,发送线程从队头取图片,队列满截图线程等待,队列空发送线程等待,设计的时候,应该根据设备的配置和数据情况在两个线程都设定个动态的平均休眠值(每次截图或发送间隔),避免列队空或者队列满,否则会导致出现卡帧的现象,不过如果是局域网的话,传输速度快,代码没太大问题的话,一般不会卡帧。

关键的实现部分其实跟是否是android平台没啥太大的关系,思路给你了,代码还是自己写吧

另外,提醒你一下,android上整个屏幕截图(应用外截图)是需要root权限的,如果只是应用内截图(自己程序的Activity、View等),那就没问题

u013755250
u013755250   2016.03.28 18:09

通过容器存放截图路径…两个线程同时开工,一个负责截图,存到内存卡,并把路径放入容器,如果容器满了,停止截图,未满继续存放。另一个线程负责发送,每次取一个路径,获取图片发送,如果容器空就阻塞…容器要求线程安全。这是生产者消费者思想

cckker
cckker   2016.03.30 19:46

建立一个的消息队列做图片顺序控制和数据缓冲,截图线程截图后把截图(对象或者图片路径)从队尾插入,发送线程从队头取图片,队列满截图线程等待,队列空发送线程等待,设计的时候,应该根据设备的配置和数据情况在两个线程都设定个动态的平均休眠值(每次截图或发送间隔),避免列队空或者队列满,否则会导致出现卡帧的现象,不过如果是局域网的话,传输速度快,代码没太大问题的话,一般不会卡帧。

关键的实现部分其实跟是否是android平台没啥太大的关系,思路给你了,代码还是自己写吧

另外,提醒你一下,android上整个屏幕截图(应用外截图)是需要root权限的,如果只是应用内截图(自己程序的Activity、View等),那就没问题

luochoudan
luochoudan   Ds   Rxr 2016.03.28 19:27

建议采纳“陌上百度”童鞋的思路。

crazy1235
crazy1235   Ds   Rxr 2016.03.29 10:40

对,就是生产者消费者问题。
一个存一个取~

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Android 多线程间变量同步的问题
概述在 Android 开发中,常常会遇到这样的需求:主线程用到的成员变量需要在子线程初始化,初始化的过程是异步的,由于 CPU 分配时间片资源是随机的,主线程使用时,该成员变量可能依然是 null,导致空指针。这就是多线程间变量同步的问题。代码如下:public class AsyncMemberInitiation { static User user = null;
主线程 子线程 同步请求 异步请求
昨天小编突然想到一个问题,那就是主线程避免进行耗时操作,我想到 好像我的请求网络操作都是在主线程中进行的啊,后来一想不对啊,如果都是在主线程中进行的,应用早不可以用了,经过小编的试验得出下面结论,特此记录一下: 1 同步请求必须另开线程,否则报错:android.os.NetworkOnMainThreadException 2 异步请求本身就已经开启了新的线程,所以在写在应用生命周期中没
主线程 和子线程的同步控制
有道面试题  子线程循环10次 然后 主线程 循环100次  如此往复50次  通过主线程和子线程的同步实现 public class Test { public static void main(String args[]) { //子线程循环10次,主线程循环100次 如此循环50次 new Thread( new Runnable(){ @Overrid
java Android 中关于线程同步问题
Java 两个线程间的通信
Android 中aidl调用执行线程和同步异步问题
aidl调用中执行所在线程
Android两个子线程之间的通信
Android中两个子线程的通信demo
GCD-两个网络请求同步问题
在网络请求的时候有时有这种需求 两个接口请求数据,然后我们才能做最后的数据处理。但是因为网络请求是移步的 。我们并不知道什么时候两个请求完成 。 通常面对这样的需求会自然的想到 多线程 啊 。表现真正的技术的时刻来啦,可以使用 group 队列啊 。等队列中的请求任务都完成 ,在通知主线程处理汇总数据嘛 。 今天我也是这么写的,但是发现主线程并没有等到队列中的分线程网络请求bock
Android 多线程保证操作同步(同步锁的俩种)
今天来介绍一下android中多线程同步的机制首先我们来创建几个多线程,模仿一下文件读写的操作。private void writeLog() { for (int i = 0; i < 3; i++) { try { Log.e(TAG, "showLog: " + Thread.currentThread().getName() + "写入...
Android中同步与异步的问题
android 只有UI线程可以刷新界面,其他副线程不行,这样就需要副线程通过通信消息修改刷新和修改界面。  有2种方式可以实现:  AsyncTask,Handle  AsyncTask  android提供的简单用于异步通讯的线程 主要四个实现接口:      onPreExecute(), 该方法将在执行实际的后台操作前被UI 线程调用。可以在该方法中做一些准备工作,如在
Android分析主线程与子线程,以及子线程之间相互通信
通过查源码来不断的学习Android的消息发送机制,一直在使用但对此具体如何实现的从未探索过,希望通过这段时间的不断学习更加深入了解。