Java 如何在android中创建可重用的异步任务?
我在android中有一个应用程序,我正在访问几个REST Web服务。我正在使用AsyncTasks访问这些任务,并在课后进行一些UI更改。我想在不同的活动中使用这些电话。但是,根据我阅读的所有教程,AsyncTasks在活动中用作内部类(这很有意义,因为它们正在更改这些活动中的视图)。但是如何解决这些异步任务的可重用性呢?更重要的是,假设我想在位置更改时执行一些异步任务调用。我有一个LocationListener(它是一个单独的外部类),我想在onLocationChange()方法内部进行API调用。但是我无法访问我想要的视图,因为我不在活动类中。有没有人有一个很好的解决方案或想法来设计类的架构?谢谢。您可以将异步任务创建为单独的类,而不是集成到任何活动中 示例代码如下所示:Java 如何在android中创建可重用的异步任务?,java,android,android-asynctask,Java,Android,Android Asynctask,我在android中有一个应用程序,我正在访问几个REST Web服务。我正在使用AsyncTasks访问这些任务,并在课后进行一些UI更改。我想在不同的活动中使用这些电话。但是,根据我阅读的所有教程,AsyncTasks在活动中用作内部类(这很有意义,因为它们正在更改这些活动中的视图)。但是如何解决这些异步任务的可重用性呢?更重要的是,假设我想在位置更改时执行一些异步任务调用。我有一个LocationListener(它是一个单独的外部类),我想在onLocationChange()方法内部进
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
}