我怎样才能阻止我的AsyncTask线程。或停止chatmanager
我开发的聊天应用程序使用XMPP由smack客户端。我使用后台线程传入消息通知和工作正常。但现在当我在聊天视图然后我不想通知传入消息。所以我删除了chatmangerlistener。但它不起作用。我怎样才能阻止我的AsyncTask线程。或停止chatmanager
我用我的第二种方法,当我进入聊天视图时,我的后台线程将会关闭。但我看到后台线程没有关闭或停止。 isCancelling方法是给我false。
这是代码: -
public class incomingmsg extends AsyncTask<String, Void, String>
{
String msg;
protected String doInBackground(String... urls) {
connection = XMPPLogic.getInstance().getConnection();
// register listeners
ChatManager chatmanager = connection.getChatManager();
chatmangerlistnr = new ChatManagerListener()
{
@Override
public void chatCreated(final Chat chat, final boolean createdLocally) {
chat.addMessageListener(new MessageListener()
{
@Override
public void processMessage(Chat chat, Message message) {
msg = message.getBody();
System.out.println("Received message: "
+ (message != null ? message.getBody() : "NULL"));
GeneratNotification(msg);
}
});
}
};
connection.getChatManager().addChatListener(chatmangerlistnr);
// idle for 20 seconds
/* final long start = System.nanoTime();
while ((System.nanoTime() - start)/1000000 < 20000) // do for 20 seconds
{
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
*/
System.out.println("is cancellable "+this.isCancelled());
return msg;
}
protected void onPostExecute(String r) {
// GeneratNotification(r);
}
}
我米困惑,如果isCancellable()
方法是false
然后我怎么能阻止它?或者我怎样才能删除我的chatlistener?
请高手帮帮我。
取消任务 任何时候都可以通过调用cancel(boolean)取消任务。调用此方法将导致对isCancelled()的后续调用返回true。调用此方法后,onCancelled(Object)将在doInBackground(Object [])返回后调用,而不是onPostExecute(Object)。为确保尽快取消任务,您应该始终从doInBackground(Object [])周期性检查isCancelled()的返回值,如果可能的话(例如在一个循环内)。
检查documentation更多。
开始你异步:
incomingmsg aTask = new incomingmsg();
aTask.execute(...);
阻止你异步
aTask.cancel(true);
通过约定使用开头大写字母
public class incomingmsg extends AsyncTask<String, Void, String>...
改变其类的名称:
public class Incomingmsg extends AsyncTask<String, Void, String>...
,但它只是一个很好的做法
完整的示例:
AsyncTask<Void, Void, Void> myTask = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
//do this test ever step of you async task.
if(!isCancelled()){
//do something here
}
return null;
}
@Override
protected void onPostExecute(Void result) {
myTask = null;
}
};
//here u start u task:
myTask.execute(null, null, null);
if(myTask != null){
//here u stop u task:
myTask.cancel(true);
}
thx但我使用它新incomingmsg()。execute(); – user2160008 2013-04-23 11:47:01
所以我需要改变**新incomingmsg().execute()** – user2160008 2013-04-23 11:48:00
即时仍然没有工作 – user2160008 2013-04-23 12:02:23
感谢ü。但可能在我的上述代码中? – user2160008 2013-04-23 12:02:57
@ user2160008不,但我懒得写你的代码免费正常,即使没有一个upvote :) – 2013-04-23 12:24:33
plz帮助我。你的帮助可能会对我很满! – user2160008 2013-04-24 11:52:05