Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在android中创建可重用的异步任务?_Java_Android_Android Asynctask - Fatal编程技术网

Java 如何在android中创建可重用的异步任务?

Java 如何在android中创建可重用的异步任务?,java,android,android-asynctask,Java,Android,Android Asynctask,我在android中有一个应用程序,我正在访问几个REST Web服务。我正在使用AsyncTasks访问这些任务,并在课后进行一些UI更改。我想在不同的活动中使用这些电话。但是,根据我阅读的所有教程,AsyncTasks在活动中用作内部类(这很有意义,因为它们正在更改这些活动中的视图)。但是如何解决这些异步任务的可重用性呢?更重要的是,假设我想在位置更改时执行一些异步任务调用。我有一个LocationListener(它是一个单独的外部类),我想在onLocationChange()方法内部进

我在android中有一个应用程序,我正在访问几个REST Web服务。我正在使用AsyncTasks访问这些任务,并在课后进行一些UI更改。我想在不同的活动中使用这些电话。但是,根据我阅读的所有教程,AsyncTasks在活动中用作内部类(这很有意义,因为它们正在更改这些活动中的视图)。但是如何解决这些异步任务的可重用性呢?更重要的是,假设我想在位置更改时执行一些异步任务调用。我有一个LocationListener(它是一个单独的外部类),我想在onLocationChange()方法内部进行API调用。但是我无法访问我想要的视图,因为我不在活动类中。有没有人有一个很好的解决方案或想法来设计类的架构?谢谢。

您可以将异步任务创建为单独的类,而不是集成到任何活动中

示例代码如下所示:

    public class KeyTask extends AsyncTask<Void, Void, String> {

    @Override 
    protected void onPreExecute() { 
        Log.i("onPreExecute", ".onPreExecute() — start");


    } 

    @Override 
    protected String doInBackground(Void ... params) {
        Log.i("TransmissionKeyTask", ".doInBackground() — start");

        }

    @Override
    protected void onPostExecute(String result) {
        Log.i("onPostExecute", ".onPostExecute() — start");
    }       
}

是的,这是可以做到的,但是如果我需要更改某些组件,我必须在onPostExecute方法中进行更改。如果任务被用于更多不同的活动,那可能是个问题。我认为,在这种情况下,可以通过检查上下文的实例(我说的对吗?)来实现,如何检查用户是否尚未导航到其他活动?您可以使用枚举或开关大小写等多种方法进行区分。只要在调用这些任务时使用构造函数并使用特定值进行调用,就可以从OO透视图中创建可重用的业务组件,而不是可重用的异步任务。查看我的答案了解更多详细信息。你是对的,但是,当我唯一需要的是在不同的活动中不同地实现onPostExecute()方法时,它似乎重复了很多代码。在我看来,隔离AsyncTask会更好,但不会获得任何真正的好处(可重用性、可测试性),而不是增加编码复杂性(上下文引用传入和传出)。当从OO的角度讨论代码重构时,更多地从问题抽象层考虑,而不是简单地从纯代码层剥离内部类(AsyncTask、BaseAdapter等)。如果您真的希望简化代码,请考虑使用SuffActudio维护AsYcTebug代码,这比创建AsyncTask作为单独的类要好。
public KeyTask(Context context) {
        // TODO Auto-generated constructor stub

}