【问题标题】:AsyncTask Class异步任务类
【发布时间】:2015-08-21 14:14:51
【问题描述】:

我正在开发我的 android 项目并需要一些帮助。 我有两节课。其中一个是 AsyncTask 类,用于连接到 Web 服务器以下载一些信息,另一个是 Activity 类,用于显示这些信息。我认为我的问题很清楚,并且之前被许多开发人员询问过。我不知道如何将这些信息返回给 Activity 类!我曾经在 Activity 类中创建 AsyncTask 类,使用这种方法,我能够将结果放入 Activity 类的变量中,但过了一段时间我发现它违反了 OOP 的概念,所以我需要将这两个类分开。

事实

AsyncTask 类有两个重要的方法。第一个是准备结果的 doInBackground。在 onPostExecute 之后,您可以操纵结果。

我为实现这个目标做了什么?

其实我用谷歌搜索,但没有找到任何有用的东西! 只有一个有吸引力的解决方案被接受了,虽然我不能使用它!它建议创建一个接口类,但不清楚。你认为这是唯一的解决方案吗?你对我的问题有什么解决办法吗?

【问题讨论】:

标签: android android-asynctask


【解决方案1】:

如果您想从 Asynctask 向 Activity 发布多次数据,则 Handler 特别有用。

一个 Handler 对象向创建它的线程注册自己。例如,如果您在 Activity 的 onCreate() 方法中创建 Handler 类的新实例,则生成的 Handler 对象可用于将数据发布到 Acvity/主线程。

处理程序允许您发送和处理与线程的 MessageQueue 关联的 Message 和 Runnable 对象。每个 Handler 实例都与单个线程和该线程的消息队列相关联。当您创建一个新的处理程序时,它会绑定到创建它的线程的线程/消息队列——从那时起,它会将消息和可运行对象传递到该消息队列并在它们从消息中出来时执行它们排队。

您可以创建 Handler 实例并覆盖 handleMessage 方法。将 Handler 引用传递给 Asynctask 以从 onPostExecute 发送消息。

【讨论】:

    【解决方案2】:

    创建一个接口并在Activity中实现。

    public interface AsyncResponse {
        void processFinish(String output);
    }
    

    在 AsyncTask 类中

    public AsyncResponse delegate=null;
    
    
    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        delegate.processFinish(result);
    }
    

    在活动实现接口

    Activity implements AsyncResponse {task = new AsyncTask();
               task.execute();
               task.delegate = this; @Override
    public void processFinish(String output) {// you got output here  }}
    

    【讨论】:

    • 那是一堆代码。为了使它成为答案,请解释它的作用。此外,它远不是一个最小的解决方案,这对提问者没有帮助。
    猜你喜欢
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    相关资源
    最近更新 更多