gpt4 book ai didi

java - Android 异步任务重用

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:06:15 26 4
gpt4 key购买 nike

我正在开发一个应用程序,在许多 Activity 中我需要通过 Http 检索数据。获得数据后,我将在 onPostExecute() 回调方法中对其进行处理。

如果我将异步任务定义为内联类,则效果很好,但由于我想在许多 Activity 中执行相同的处理,我已将其定义为外部类。

所以问题是,使用外部类如何将“事件”信号发回调用类作为将数据传回的方法。我知道如何在 C# 中执行此操作,但我是 Java 的新手,看不到如何实现此操作。

最佳答案

虽然 Listener 在技术上确实是正确的,但我认为它要么太复杂,要么不够复杂。

这是一个更简单的解决方案:

class Foo {
class Bar extends AsyncTask<Void, Void, Result> {

public void onPostExecute(Result res) {
doSomething(res);
}
}

public void doSomething(Result res) {
/// process result
}

public void startTask() {
new Bar().execute();
}
}

相当于:

class Bar extends AsyncTask<Void, Void, Result> {
private final Foo foo;
public Bar(Foo foo) { this.foo = foo; }

public void onPostExecute(Result res) {
foo.doSomething(res);
}
}


class Foo {
public void doSomething(Result res) {
/// process result
}

public void startTask() {
new Bar(this).execute();
}
}

...这就是您所问的:当您将内部类拉出时,您将丢失隐式指针。只需将其显式化并传入即可。

坏消息是此解决方案会引发各种内存泄漏和生命周期问题。我非常建议,在您的程序变得更大之前,您考虑使用 IntentService 而不是 AsyncTask 并使用 Handler 或 Activity.runOnUiThread 将结果返回到 UI 线程。

关于java - Android 异步任务重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14447780/

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