我编写了一个应用程序,通过tcp/ip连接到我的服务器。 (从教程中拿出原始代码,但是改变了它)Android:取消异步任务并重新启动
那里我有一个异步任务,我连接到我的服务器并等待消息。 所以这个任务永远不会停止。
conTask = new ConnectTask().execute("");
任务看起来是这样的:
我启动它
public class ConnectTask extends AsyncTask<String, String, TcpClient> {
@Override
protected TcpClient doInBackground(String... message) {
if (isCancelled()) {
Log.d("async", "ASYNC CANCELED!!!");
return null;
}
//we create a TCPClient object and
mTcpClient = new TcpClient(new TcpClient.OnMessageReceived() {
@Override
public void reconnect()
{
Log.d("recon", "here i can try to reconnect");
reConnect();
}
@Override
//here the messageReceived method is implemented
public void messageReceived(String message) {
//this method calls the onProgressUpdate
if (message.equals("connected"))
{
...
}
}
});
mTcpClient.run();
return null;
}
}
的问题是,我尝试重新连接,当连接失败或中断。 如果发生这种情况,我TcpClient的实例功能调用重新连接() - 方法,我称之为重新连接() - 方法从我Mainclass,在那里我试图杀死异步任务,并重新启动它:
conTask.cancel(true);
conTask = null;
// disconnect
mTcpClient.setMRun(false);
mTcpClient.stopClient();
mTcpClient = null;
conTask = new ConnectTask().execute("");
它工作正常,但突然重新连接时,应用程序停止运行,我不知道为什么。它重复地调用reconnect-Method,例如,如果WLAN关闭。如果我快速打开它,它就可以工作。但是,如果我等待太久,该应用程序已经崩溃。
所以我的最后一个问题是:如何从内部停止异步任务并重新启动它?显然我做错了什么。
我将不胜感激!
我不知道答案,但在你的情况下,你不应该使用Asynctask等待太久。 “理想情况下,AsyncTasks应该用于短期操作(最多几秒钟)。” http://developer.android.com/reference/android/os/AsyncTask.html表示。 – Robust