我在使用我的应用程序时遇到问题...我正在使用Asynctask类来执行我的后台操作,因为使用套接字我相信在背景中很好。
好吧,在我的应用程序中,我有一个udp监听器和一个udp发送器分别从服务器和服务器监听任何类型的数据,我已经为它们做了异步类,现在我想要两个Asynctask类从我的主要活动执行按钮点击,我可以做的数据,我有一个停止按钮来停止执行,但一旦我点击停止按钮,线程仍然继续运行,原因是,在调用后Asynctask的onCancelled(),它调用postexecute()和我的postexecute(), 我正在创建我的Asynctask类的对象并调用execute,以便我的侦听器和发送器继续运行ie。 doinBackground()始终保持调用自己,并且侦听器和发送器继续工作。
我知道在postexecute()中创建一个Asynctask类的对象并不是一个好主意,因为它将在无限循环中运行,但如果我能够在停止按钮上取消执行,我将调用oncancelled(),可能对我有用..
请帮我解决这个问题。
答案 0 :(得分:0)
我认为你的问题是,当你取消你的asynkTask时,你实际上只取消了在活动中调用的最外面的asynckTask,但是当你以递归方式运行asyncTask的其他实例时,那么你要去取消它们以使整个事情停止。
为什么不从doInBackground()
内删除代码并将其放在方法中并从doInBackground()
内部调用,如下所示:
protected Void doInBackground(Object... params) {
while(!isCancelled()){
//call the method
}
return yourReturnType;
}