gpt4 book ai didi

android - 在无限循环中调用 AsyncTask 从服务器拉取数据是一种好方法吗?

转载 作者:太空狗 更新时间:2023-10-29 16:38:12 25 4
gpt4 key购买 nike

好吧,在应用程序中,我尝试每 4 秒从服务器中提取一次数据,并更新应用程序。我正在使用处理程序,因为我每 4 秒调用 AsynTask 从服务器获取数据。

只是我担心每 4 秒为 AsynTask 创建的实例会导致任何问题吗?

这就是我正在做的。

private static final int DELAY = 1000 * 4;
final Handler printHandler = new Handler();
private boolean keepLooping = true;
printHandler.postDelayed(printStuff, DELAY);


Runnable printStuff = new Runnable(){
@Override
public void run(){
// call AsynTask to perform network operation on separate thread
new DownloadMainScore().execute("http://server/root/score.php");
if(keepLooping)
printHandler.postDelayed(this, DELAY);
}
};

最佳答案

关于您选择的并发工具:

你是对的,这不是很好。 AsyncTasks 旨在成为设计偶尔需要更新 UI 的异步调用时的有用助手。因此,在旧版本(< 1.6)的 Android 中,最大线程池大小为 10!

最好直接使用构建 AsyncTask 的非常健壮的 Java。如果您想重复执行此操作,请尝试 ScheduledExecutorService .我看到他们甚至为您树立了一个很好的榜样。

或者,鉴于您的分数似乎下降了,最好的办法可能是通过 XMPP 这样的协议(protocol)保持持久连接。 ,为此有许多 Java 服务器和客户端。

最后,你可能想看看gcm .

关于一般设计问题

我看到你想经常打印乐谱。实际上每四秒一次。但是分数没变有什么意义呢?此外,如果您的互联网连接速度很慢,八秒后四秒前的连接还没有完成怎么办?现在您将启动另一个下载请求,即使另一个下载请求返回时也是最新的!

解决方案是将下载机制和UI更新机制解耦。一种方法是在单线程执行器上安排您的计划下载 - 而不是您可以在 AsyncTask 中控制的东西,AsyncTask 完成后会导致 UI 更新并显示分数。

祝你好运!

代码草图

现在没有设置环境,但是在非常粗略的代码草图(检查语法)中,使用预定的执行程序看起来像:在类里面:

private final ScheduledExecutorService downloadScheduler = Executors.newSingleThreadScheduledExecutor(1);

然后在其他地方,无论你在哪里开始这样做

final Runnable scoreHttpRunnable = new Runnable() {
@Override public void run() {
...
//do Http Syncronously here- I guess whatever is in the doInBackground(...) part of that Async task you wrote!
...
final int newScoreResult = ... (do whatever you do here)
...
runOnUiThread(new Runnable() { @Override public void run() { yourView.updateHoweverYouLike(newScoreResult); } })
...
};
downloadScheduler.scheduleAtFixedRate(scoreHttpRunnable, 0, 4, TimeUnit.SECONDS);

走其他两条路线之一真的太多了,无法在一个问题的单个答案中发布。如果还没有的话,那将是另一个 SO 问题。

关于android - 在无限循环中调用 AsyncTask 从服务器拉取数据是一种好方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22954938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com