有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android异步任务重用

我正在开发一个应用程序,在许多活动中,我需要通过Http检索数据。 一旦有了数据,我就在onPostExecute()回调方法中处理它

如果我将异步任务定义为一个内联类,那么这很好,但是由于我想在许多活动中执行相同的处理,所以我将其定义为一个外部类

所以问题是,使用外部类如何向调用类发回“事件”信号,作为将数据传回的手段。我知道如何在C#中实现这一点,但我对Java是新手,不知道如何实现这一点


共 (2) 个答案

  1. # 1 楼答案

    诚然,一个听众在技术上是正确的,但我认为这要么太复杂,要么不够复杂

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

    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,并使用处理程序或活动。运行Nuithread将结果返回到UI线程

  2. # 2 楼答案

    一种方法:

    定义一个名为ParentActivity(当然是扩展活动)的父抽象类。包含一个名为onAsyncCallback();的抽象方法的

    让每个使用该任务的类扩展该类并实现该方法

    在AsyncTask构造函数中,让它在^{中接受

    例如

    ParentActivity activity;
    public MyTask (ParentActivity myActivity)
    {
     this.activity = myActivity;
    }
    

    onPostExecute()中完成时,只需执行

    activity.onAsyncCallback(data);
    

    这也适用于接口,它做同样的事情,除了在侦听器实例中有构造函数accept的intead之外