在我的应用中,我必须调用一个方法来完成一些繁重的工作(我能感觉到设备滞后)。为了避免这种情况,我创建了一个 AsyncTask,它工作得很好。
我使用 Thread 实现了同样的事情,在这里,它也没有出现任何问题并且工作正常。
现在我的问题是哪个性能更好 - AsyncTask 或 Thread。
我知道 AsyncTask 使用线程池来执行后台任务,但在我的例子中它只会被调用一次。所以我认为这不会造成任何问题。
有人可以解释一下吗?我应该使用哪一个以获得更好的性能?
注意:两者都在我的 Activity 中被调用,例如从 UI 线程。
最佳答案
Can someone throw some light on it. Which one should I use for better performance?
我认为,如果您想象启动一次 native Thread 和 AsyncTask 的情况,我认为性能不会有差异。
如果您不想通过 UI 向潜在的 USER 通知有关某些任务进度的相关信息,通常会使用 native 线程。在这里, native 线程失败,因为它们与 UI 线程不同步,您无法从它们执行 UI 操作。
另一方面,AsyncTask 将后台工作与 UI 工作结合起来,并提供与 UI 同步的方法,并允许通过调用其生命周期的适当方法随时执行 UI 更新。
通常,如果某些任务持续超过 5 秒,您应该通知 USER
“正在后台运行,请稍等,直到完成”
当然,这可以通过不同的方式实现,但这在很大程度上取决于您的任务的性质——如果您需要显示任务的进度(已经下载了多少 MB、复制的文件数量和显示每个文件的名称正在进行的对话等)或者你不这样做(例如仅使用开始和结束消息在“静默”中创建一些大数据结构)。
所以在我的回答结束时:
Which one should I use for better performance?
我认为你不可能得到完全正确的答案,因为每个开发人员都有不同的经验,不同的编码风格。我怎么说,他们的表现没有什么不同。我认为它是相同的(如果您将读取 50 MB 的文件,则读取 native 线程和 AsyncTask 都不会更快)。这又取决于任务的性质和您的个人选择。
对于可能持续更长时间的任务,您还可以尝试考虑 java.util.concurrent 提供的 API 工具。包(ThreadPoolExecutor、FutureTask 等)
关于android - 性能比较 : AsyncTasks vs Threads,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15744904/
我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
方法应返回-1,0或1分别表示“小于”、“等于”和“大于”。对于某些类型的可排序对象,通常将排序顺序基于多个属性。以下是可行的,但我认为它看起来很笨拙:classLeagueStatsattr_accessor:points,:goal_diffdefinitializepts,gd@points=pts@goal_diff=gdenddefothercompare_pts=pointsother.pointsreturncompare_ptsunlesscompare_pts==0goal_diffother.goal_diffendend尝试一下:[LeagueStats.new(
我正在使用Ruby解决一些ProjectEuler问题,特别是这里我要讨论的问题25(Fibonacci数列中包含1000位数字的第一项的索引是多少?)。起初,我使用的是Ruby2.2.3,我将问题编码为:number=3a=1b=2whileb.to_s.length但后来我发现2.4.2版本有一个名为digits的方法,这正是我需要的。我转换为代码:whileb.digits.length当我比较这两种方法时,digits慢得多。时间./025/problem025.rb0.13s用户0.02s系统80%cpu0.190总计./025/problem025.rb2.19s用户0.0
我正在寻找一个用ruby演示计时器的在线示例,并发现了下面的代码。它按预期工作,但这个简单的程序使用30Mo内存(如Windows任务管理器中所示)和太多CPU有意义吗?非常感谢deftime_blockstart_time=Time.nowThread.new{yield}Time.now-start_timeenddefrepeat_every(seconds)whiletruedotime_spent=time_block{yield}#Tohandle-vesleepinteravalsleep(seconds-time_spent)iftime_spent
如果用户是所有者,我有一个条件来检查说删除和文章。delete_articleifuser.owner?另一种方式是user.owner?&&delete_article选择它有什么好处还是它只是一种写作风格 最佳答案 性能不太可能成为该声明的问题。第一个要好得多-它更容易阅读。您future的自己和其他将开始编写代码的人会为此感谢您。 关于ruby-on-rails-如果条件与&&,是否有任何性能提升,我们在StackOverflow上找到一个类似的问题:
我有两个文本文件,master.txt和926.txt。如果926.txt中有一行不在master.txt中,我想写入一个新文件notinbook.txt。我写了我能想到的最好的东西,但考虑到我是一个糟糕的/新手程序员,它失败了。这是我的东西g=File.new("notinbook.txt","w")File.open("926.txt","r")do|f|while(line=f.gets)x=line.chompifFile.open("master.txt","w")do|h|endwhile(line=h.gets)ifline.chomp!=xputslineendende
我正在尝试对某些帖子的评论使用简单的身份验证。用户使用即时ID和密码输入评论我使用“bcrypt”gem将密码存储在数据库中。在comments_controller.rb中像这样@comment=Comment.new(comment_params)bcrypted_pwd=BCrypt::Password.create(@comment.user_pwd)@comment.user_pwd=bcrypted_pwd当用户想要删除他们的评论时,我使用data-confirm-modalgem来确认数据在这部分,我必须解密用户输入的密码以与数据库中的加密密码进行比较我怎样才能解密密码,
我正在运行这样的代码:ifvalid_from>Date.today当我运行它时,我得到一个错误提示comparisonofDatewithnilfailed我假设它正在发生,因为在某些情况下valid_from是nil。有没有办法避免出现此错误? 最佳答案 你可以这样做:ifvalid_fromandvalid_from>Date.today...end这将在第一个子句上短路,因为valid_from为nil,因此为false。 关于ruby-Date与nil的比较失败-ruby,我们
我编写了一个Ruby应用程序,它可以解析来自不同格式html、xml和csv文件的源中的大量数据。我如何找出代码的哪些区域花费的时间最长?有没有关于如何提高Ruby应用程序性能的好资源?或者您是否有任何始终遵循的性能编码标准?例如,你总是用加入你的字符串吗?output=String.newoutput或者你会使用output="#{part_one}#{part_two}\n" 最佳答案 好吧,有一些众所周知的做法,例如字符串连接比“#{value}”慢得多,但是为了找出您的脚本在哪里消耗了大部分时间或比所需时间更多,您需要进行分