我想在屏幕上显示GIF图像,即使是在应用程序关闭的情况下。
单击鼠标,您可以实现两件事: 声音在播放 GIF图像显示 即使我关闭了正在使用的服务的应用程序,我也试图在屏幕上显示GIF theservice.java(code) package gallery.suitapps.catwalking; import android.app.Service; import android.content.Context; import android.content.Intent; import android.media.MediaPlayer; import android.media.SoundPool; import android.os.Build; import android.os.IBinder; import android.provider.Settings; import android.support.annotation.Nullable; import android.view.LayoutIn
0 2024-02-18
编程技术问答社区
服务、异步任务和线程之间的区别?
服务,异步任务和线程之间有什么区别.如果我没有错,所有这些都被用来在后台做一些事情.那么,如何决定要使用哪个以及何时? 解决方案 可能您已经阅读了有关它们的文档描述,我不会重复它们,而是我会尝试用我自己的话给答案,希望它们能帮助您. 服务就像一个活动,但没有用户界面.例如,如果您想获取天气,例如,您不会为此创建空白活动,为此,您将使用服务. 线程是线程,可能已经从其他部分知道了.您需要知道无法从线程更新UI.您需要为此使用处理程序,但要进一步阅读. 异步线是建议使用的智能线程.智能可以帮助使用它的方法,并且在UI线程上运行三种方法,这很适合更新UI组件. 我经常使用服务,异步.较少或根本没有线程,因为我几乎可以用异步扣来完成所有操作. 其他解决方案 这是您问题的最简单答案 线程 是一个执行单位,他"并行"与主线程"并行"是一个重要的点,您无法从此处的任何线程中更新UI组件. asynctask 是一个特殊的线程,它为您提供了更新UI 的帮助
0 2024-02-17
编程技术问答社区
Java runOnUiThread 和 Thread.sleep
我从一个单独的类中有此方法,其中呼叫结束时,我的imageView的颜色从红色变为白色.下面的示例代码: public void endOfCall(){ ((Activity)mContext).runOnUiThread(new Runnable(){ @Override public void run(){ TargetDetails.oncall.setVisibility(View.VISIBLE); TargetDetails.endcall.setVisibility(View.GONE); } }); try{ call.endCall(); }catch (SipException se) {} call.close(); //this is just a representation; not t
14 2024-02-05
编程技术问答社区
WAIT和BLOCKED线程状态之间的区别
线程状态等待和线程状态被阻止有什么区别? 阻止 等待监视器锁的线程处于此状态. 等待 无限期等待另一个线程执行特定动作的线程是在此状态 没有解释我的区别. 解决方案 一旦对象上调用wait(),就会等待状态.这称为等待状态.一旦线程到达等待状态,它将需要等到对象上的其他一些线程调用notify()或notifyAll(). 通知此线程后,它将无法运行.可能还会通知其他线程(使用notifyAll()),或者第一个线程尚未完成他的工作,因此它仍然被阻止,直到有机会.这称为阻止状态.每当线程试图在对象上获取锁定并且某些其他线程已经持有锁定时,就会发生阻塞状态. 一旦其他线程离开及其此线程的机会,它就会转移到可运行的状态,之后,它是根据JVM线程机制符合条件的拾取工作,并移动到运行状态. 其他解决方案 差异相对简单. 在BLOCKED状态中,线程即将输入synchronized块,但是当前在同一对象上的synchronized块内部运行了
4 2023-11-26
编程技术问答社区
Java中 "wait() "与 "sleep() "的区别
线程中的wait()和sleep()有什么区别? 我是否理解A wait() -ing线程仍处于运行模式并使用CPU周期,但是A sleep() -ing不使用任何CPU周期? 为什么我们都有 wait()和sleep()? 他们的实施如何在较低级别变化? 解决方案 a wait 可以被另一个线程调用 notify notify 在正在等待的监视器上,而a 不能.另外,wait(和notify)必须在监视器对象上的块synchronized中发生,而sleep则不: : Object mon = ...; synchronized (mon) { mon.wait(); } 此时,当前执行的线程等待并发布了监视器.另一个线程可能会 synchronized (mon) { mon.notify(); } (在相同的mon对象上)和第一个线程(假设它是监视器上等待的唯一线程)将唤醒. 您也可以致电 notifyAll 如果一个
2 2023-11-26
编程技术问答社区
我怎样才能中断一个从方法中创建的线程?
我知道您可以中断从可运行类创建的线程,但是如何中断我从方法创建的此线程?使用挥发性布尔值对我不起作用,所以我认为有一种更好的方法可以做到这一点,或者我需要以某种方式中断它.我不想中断所有线程,只是这个线程. 我创建了一种启动这样的线程的方法: public static void StartSyncThread() { new Thread() { public void run() { isRunning = true; // Set to true so while loop will start while (isRunning) { ... } } // Close run() }.start();
4 2023-10-20
编程技术问答社区
使用Map计算解决Java线程可见性和并发性错误
我使用Java 8.我有一个事件处理程序,该事件处理程序接受率高的事件(n n秒),我想在我获得这么多的事件(在这个简化的示例1000中)时将它们冲洗到存储时/p> 我在第25行myCache.get(event.getKey()).add(event.getBean());上有可见性错误吗? 我应该同步handleEvent()方法吗? public class myClass extends MySimpleEventHanlder { private Map> myCache; private ScheduledExecutorService scheduler; public void MyClass() { myCache = new ConcurrentHashMap>(); scheduler = Executors.newS
2 2023-10-20
编程技术问答社区
corePoolSize为0的ThreadPoolExecutor在任务队列满之前不应执行任务
我正在实践中经历 Java并发,并陷入了 8.3.1线程创建和拆除主题.以下脚注警告将corePoolSize保持在零. 开发人员有时会很想将核心大小设置为零,以使工作人员线程将 最终被拆除,因此不会阻止JVM退出,但这可能会导致一些 线程池中不使用同步库的奇怪的看似行为,他们的工作队列 (就像newcachedthreadpool一样). 如果池已经处于核心大小,则ThreadPoolExecutor会创建 仅当工作队列已满时,新线程.因此,用工作队列提交到线程池的任务 在队列填充之前,具有任何容量和核心的大小为零,通常是 不是所需的. 为了验证这一点,我编写了该程序,该程序无法如上所述. final int corePoolSize = 0; ThreadPoolExecutor tp = new ThreadPoolExecutor(corePoolSize, 1, 5, TimeUnit.SECONDS, new Link
4 2023-10-20
编程技术问答社区
在Java中将ExecutorService转换为守护进程
我正在使用Java 1.6中的executoreservice,仅由 开始 ExecutorService pool = Executors.newFixedThreadPool(THREADS). 当我的主线程完成(以及线程池处理的所有任务)时,此池将阻止我的程序关闭,直到我明确调用 pool.shutdown(); 我可以避免通过以某种方式将此池使用的内部线程管理变成deamon线程来调用它吗?还是我在这里错过了一些东西. 解决方案 可能最简单,首选的解决方案在 marco13的答案答案年龄更大)或接受标记(这仅意味着该解决方案适合OP情况,而不是最好的情况). . 您可以使用ThreadFactory将执行程序内部的线程设置为守护程序.这将以某种方式影响执行器服务,即它也将成为守护程序线程,因此如果没有其他非daemon线程,它将(以及它处理的线程)停止.这是简单的示例: ExecutorService exec = Executors.n
12 2023-10-20
编程技术问答社区
notifyAll()之前未被线程锁定的同步对象
我想拥有一个布尔值,以通知特定服务启动的系统的某些部分. 由于某种奇怪的原因,我得到了错误java.lang.IllegalMonitorStateException: object not locked by thread before notifyAll(). 奇怪的是,notifyall()在同步块内部,该块控制我称为notifyall()的对象. . 我的班级开始这样: public class MyService { public static Boolean notifier = Boolean.valueOf(false); @Override public void start() { synchronized (MyService.notifier) { MyService.notifier = Boolean.valueOf(true); MyServic
10 2023-10-13
编程技术问答社区
如果我在同一个类上同步了两个方法,它们可以同时运行吗?
如果我在同一类上同步了两种方法,它们是否可以同时在同一对象上运行 ?例如: class A { public synchronized void methodA() { //method A } public synchronized void methodB() { // method B } } 我知道我无法在两个不同的线程中在同一对象上两次运行methodA(). methodB() 中的同样事情 但是我可以在methodA()仍在运行时在不同线程上运行methodB()吗? (同一对象) 解决方案 两种方法都锁定同一监视器.因此,您不能同时从不同的线程上在同一对象上执行它们(两种方法之一将阻止直到另一个方法完成). 其他解决方案 在示例方法和方法B中是实例方法(与静态方法相反).将synchronized放在实例方法上意味着线程必须在对象实例上获取锁("固有锁"),该方法在线程可以开始
4 2023-10-13
编程技术问答社区
在Java中使用双线程打印奇数和偶数
我试图使用下面的两个线程进行操作.有人可以指出我在这里犯的明显错误吗? public class OddEven { public static boolean available = false; public static Queue queue = new LinkedList(); static Thread threadEven = new Thread() { @Override public void run() { printEven(); } public synchronized void printEven() { while (!available) { try { wait(); Thread.sleep(2000); } catch (In
10 2023-09-29
编程技术问答社区
每个线程都有堆栈空间吗?
如果我正确理解,则堆栈是针对局部原则的,并且引用了堆中的对象.那么,如果您有多个线程会发生什么? 他们是否同时共享相同的堆栈空间(但区域不同),还是JRE切换上下文并在线程之间切换时加载堆栈内容? 或JRE分配每个线程分开堆栈? 解决方案 或JRE分配每个线程分开堆栈? 概念上是. (请参阅此如何在特定的JVM中实现规格的概念化是...特定于实现.但是,我的理解是,当前一代(例如热点)JVMS在从OS请求的单独的内存块中分配了每个线程堆栈;例如使用mmap syscall 1 . 发生线程开关时,肯定没有批发复制堆栈内容.但是,线程上下文切换确实需要保存和加载寄存器,并且(间接)在内存缓存和TLB条目上额外加载.这可能很重要...这就是为什么过多的线程上下文开关(例如,锁定争论或过度等待/通知引起的)可能对性能不利. 1-一些JVM在每个堆栈段末尾包含一个仅读取的"红色区域"页面. (这意味着线程堆栈溢出会触发内存故障,而JVM无需明确检查每个方
14 2023-09-28
编程技术问答社区
Java:由HTTP连接创建的等待连接线程在很长的时间内处于活动状态
我有一个服务器端代码,该代码检查SOAP服务是否已启动.代码看起来像: String response = ""; while (response.length() == 0) { try { final URL url = new URL("DummySoapServiceURL"); final HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection(); InputStream inputStream = null; try { httpConnection.setRequestMethod("GET"); inputStream = httpConnection.getInputStream(); final byte[] buffer
32 2023-09-05
编程技术问答社区
如何给在semaphore中等待的线程以优先权?
我使用信号量来限制访问函数的线程数.我希望将线程唤醒下一步,应该通过一些我将要给予的优先级,而不是信号量唤醒它们的默认方式吗?我们如何实现这一目标? 这是实现: class MyMathUtil2 implements Runnable { double a; double b; String name = "demo"; Thread t; //static int currentCount = 0; static int MAX_COUNT = 2; private final Semaphore available = new Semaphore(MAX_COUNT, true); MyMathUtil2(double v1, double v2) { a = v1; b = v2; t = new Thread(this, name);
14 2023-08-28
编程技术问答社区
Vaadin 8: 在长时间加载的情况下,如何在导航到其他视图之前显示进度条窗口
我想导航到单击按钮后在网格中显示大数据的视图.我知道有懒惰的加载,但我想加载所有数据以通过单击标头来排序.通过懒惰加载,我只能对一个列进行排序. Button viewDataBtn = new Button("View scan data"); viewDataBtn .addClickListener(e -> { UI.getCurrent().getNavigator().navigateTo("scandataview/" + name); }); 这确实有效,但是有很长的休息时间,直到可见新的视图为止. 因此,我想显示一个带有进度条的窗口,直到加载新视图并将新视图加载到另一个线程中为止.我尝试以下没有成功: viewDataBtn .addClickListener(e -> { UI.getCurrent().addWindow(showProgress); new Thread(new Loader
8 2023-07-14
编程技术问答社区
如何使用CompletableFuture在不等待的情况下平行执行线程并合并结果?
i具有executeGetCapability方法,该方法在不同的线程中执行,但是这些线程顺序运行..指一个是在另一个线程完成的 之后完成的 @Async("threadPoolCapabilitiesExecutor") public CompletableFuture executeGetCapability(final String id, final LoggingContextData data){...} 和以下方式调用此方法: public CapabilityResponseDTO getCapabilities(final List ids) { final CapabilityResponseDTO responseDTO = new CapabilityResponseDTO(); final List listOfCapabilityDTOS
使用多线程和查找元素来搜索一个列表(不使用并行流)
我有一种方法 public boolean contains(int valueToFind, List list) { // } 如何将数组分成X块?并有一个新的线程,用于搜索每个块寻找值.如果该方法返回true,我想阻止其他线程搜索. 我看到有很多示例可以简单地在线程之间拆分工作,但是我如何构造它,以便一旦一个线程返回true,所有线程并将其作为答案返回? 我不想使用并行流,因此(来自 如果这样做,请再次查看上一个示例.有一个大 错误.你看到了吗?问题是所有平行流都使用 常见的叉-Join线程池,如果您提交长期运行的任务, 您有效地阻止了池中的所有线程.因此,你阻止 使用并行流的所有其他任务.想象一个servlet 环境,当一个请求致电GetStockinfo()和另一个请求时 countprimes().即使每个人都会阻止另一个 需要不同的资源.更糟糕的是,您无法指定线程 平行流的池;整个班级加载程序必须使用相同的 一个. 解决方案
30 2023-06-25
编程技术问答社区
Java-线程和静态变量
刚从Java中的线程开始,我无法推理程序的输出 public class ThreadExample extends Thread{ private int info; static int x = 0; public ThreadExample (int info) { this.info = info; } public void run () { if ( info == 1 ) { x = 3; System.out.println(Thread.currentThread().getName() + " " + x); } else{ x = 1; System.out.println(Thread.currentThread().getName() + " " + x);
38 2023-06-25
编程技术问答社区