我想建立一个每次我想做网络连接的类,我会用它.
我想首先打开一个对话框,然后建立网络连接(或者从sql获取内容或从Web下载或更新sql),然后关闭对话框.
我需要等待功能结束才能继续.
我想使用AsyncTask,但我无法找到一种方法来确定在AsyncTask中使用哪个函数.我找到了两个解决方案,switch-case或尝试使用java反射发送函数.两种解决方案都不太好.
有人有另一种想法或其他方式来做到这一点?
解决方法:
考虑使用Command设计模式.
Here is Java example.您可以通过回调对其进行扩展,以便在完成后台工作后执行某些操作.
public abstract class Command {
protected AsyncTaskCallback callback;
public Command(AsyncTaskCallback callback) {
this.callback = callback;
}
public abstract void execute();
public AsyncTaskCallback getCallback() {
return callback;
}
public interface AsyncTaskCallback {
public void onPreExecute();
public void onPostExecute();
}
}
祈求:
public class Invoker extends AsyncTask<Void, Void, Void> {
private Command command;
public static void execute(Command command) {
new Invoker(command).execute();
}
private Invoker(Command command) {
this.command = command;
}
@Override
protected Void doInBackground(Void... params) {
return command.execute();
}
@Override
protected void onPreExecute() {
if (command.getCallback() != null) {
command.getCallback().onPreExecute();
}
}
@Override
protected void onPostExecute(Void result) {
if (command.getCallback() != null) {
command.getCallback().onPostExecute();
}
}
}
因此,您的AsyncTask不知道它正在执行哪个命令,因此可以在整个应用程序中使用.现在,您可以在Activity中实现接口AsyncTaskCallback,并处理所有与UI相关的内容.
例:
public class MyActivity extends Activity implements AsyncTaskCallback {
...
public void onPreExecute() {
showProgress();
}
public void onPostExecute() {
hideProgress();
doOtherThings();
}
...
Command myCommand = new Command(this) {
@Override
public void execute() {
// Do specific background work
}
}
Invoker.execute(command);
你还需要处理orientation changes.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。