我知道这个问题已经被问过很多次了。但是有些事情我从来没有找到答案。所以希望有人能给我一些启发。
我们都知道,AsyncTask和Thread是执行后台任务以避免ANR问题的选项。建议asynctask只能用于短期运行的任务,而线程可以用于长期运行的任务。asynctask不应用于长任务的原因是众所周知的,这与asynctask可能导致的泄漏有关,因为它可能在活动销毁后继续运行。这很有说服力。然而,这也导致了一些其他问题:
谢啦
AsyncTask和Thread Handler没有精心设计和实现。RxJava、Akka和其他用于异步执行的框架似乎开发得更仔细。
每种技术都有其局限性。AsyncTask适用于能够显示UI进度的单个并行任务。但是,如果重新生成活动(例如,由于屏幕旋转),则会丢失与UI的连接(此问题的一种可能解决方案是https://github.com/rfqu/AsyncConnector)。
线程处理程序
即使没有消息要处理,也会为线程堆栈保留内存。这限制了可能的线程数。您可以拥有比处理程序线程更多的Akka参与者
或RxJava订阅者
,具有类似的功能。
因为没有人回复。那我就回答我自己的问题。
AsyncTask
只推荐用于短任务(大约5秒)的原因是没有方法可以取消正在运行的AsyncTask
。存在一个名为AsyncTask.cancel(true)
的方法,它调用onSused(Result结果)
。但是,根据文档,此方法“在调用取消(boolean)并完成doInbackground(Object[])之后在UI线程上运行。”(https://developer.android.com/reference/android/os/AsyncTask.html)。另一方面,线程
可以使用Thread.interrupt()
停止。Service
中运行AsyncTask
应该没有任何问题,前提是您知道AsyncTask
的取消限制并且内存泄漏的可能性可以由AsyncTask
创建。请注意,显然没有必要在已经在工作线程中运行的IntentService
中使用AsyncTask
。RxJava
而没有任何问题。请注意,相同的内存泄漏问题也适用于RxJava
。您也许可以在这里找到其中一个特定问题。还有一大堆关于使用RxJava
处理泄漏/屏幕旋转的讨论,可以通过Google轻松找到。我有一个简单的问题。我目前正在使用Netty处理来自客户端的TCP和UDP数据包。我有一个单独的线程上的每个套接字侦听器,它工作得很好。 我现在担心的是,当流量开始严重冲击它时,我不认为每个处理程序只有一个线程来管理消息就足够了。为每条消息生成一个新线程是否正确(我觉得不正确)?或者我应该使用像线程池这样的东西来实现这一点?如有任何建议,将不胜感激。 下面是消息处理程序的一些示例代码。我编写了一些
线程中使用 java.lang.Runnable 如果用户在代码中通过 java.lang.Runnable 新启动了线程或者采用了线程池去异步地处理一些业务,那么需要将 SOFATracer 日志上下文从父线程传递到子线程中去,SOFATracer 提供的 com.alipay.common.tracer.core.async.SofaTracerRunnable 默认完成了此操作,大家可以按照
我正在设置一个Netty服务器来接受多个传入的客户端连接,这将反过来做一些处理,但对wroker线程组vs Handler线程感到困惑 我尝试分配10个工作线程和20个处理线程,如下所示。 我无法理解工作组的任务和创建新服务器处理程序之间的区别。据我所知,处理器线程池将分配给NettyServerHandler的每个实例。但是,创建由10个线程组成的工作组池的作用是什么呢?
我正在尝试使用多个处理器类在处理器步骤中处理记录。这些类可以并行工作。目前我已经编写了一个多线程步骤,其中我 设置处理器类的输入和输出行 提交给遗嘱执行人服务 获取所有未来对象并收集最终输出
问题内容: 我想自己开发一个探查器,我想解释一下我所看到的。即使在最简单的程序中,也总是会出现一些默认线程: 销毁JavaVM 信号调度器 终结器 参考处理程序 尽管他们的名字很能说明问题,但我想获得更多信息。似乎这些线程没有记录在案,是否有人知道挖掘这些信息的来源,甚至确切地知道这些线程的作用? 问题答案: DestroyJavaVM是一个线程,该线程在程序退出时卸载Java VM。在大多数情况
问题内容: 我想在后台线程中运行一些Runnable。我想使用Handler,因为它便于延迟。我的意思是 凡 可运行 应当运行 后台 线程。是否可以创建这样的处理程序?是否在某个地方有“背景” Looper,或者该如何创建? PS我知道如何使用自定义类扩展Thread,但是比处理程序方式需要更多的编码工作。因此,请不要发布其他解决方案或类似的内容 如果Handler能以“干净”的方式做到这一点,我