BEN*_*der 6 java android asynchronous
我正在开发一个应用程序,我需要通过Http检索数据.有了数据后,我在onPostExecute()回调方法中处理它.
如果我将async任务定义为内联类,这可以正常工作,但是由于我想在许多活动中执行相同的处理,我将其定义为外部类.
所以问题是,使用外部类如何将"事件"发送回调用类作为传递数据的方法.我知道如何在C#中执行此操作,但我是Java的新手,无法看到如何实现这一点.
虽然监听器在技术上确实是正确的,但我认为它要么太复杂,要么不够复杂。
这是一个更简单的解决方案:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
相当于:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
...这就是您所问的:当您将内部类拉出时,您会丢失隐式指针。只需明确并传递它即可。
坏消息是,该解决方案会出现各种内存泄漏和生命周期问题。我强烈建议,在您的程序变得更大之前,您考虑使用 IntentService 而不是 AsyncTask,并使用 Handler 或 Activity.runOnUiThread 将结果返回到 UI 线程。
| 归档时间: |
|
| 查看次数: |
6631 次 |
| 最近记录: |