我有一个asynktask连接到服务器。当活动第一次启动时,它工作正常。当暂停后恢复活动时,asynk任务不会执行。我也尝试在execute()
中调用onResume
方法,但没有帮助。
public class connectTask extends AsyncTask<String, String, TCPClient> {
@Override
protected TCPClient doInBackground(String... message) {
//we create a TCPClient object and
mTcpClient = new TCPClient(new TCPClient.OnMessageReceived() {
@Override
//here the messageReceived method is implemented
public void messageReceived(String message) {
//this method calls the onProgressUpdate
publishProgress(message);
}
});
mTcpClient.run(SiteNumber);
return null;
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
//in the arrayList we add the messaged received from server
//sc.showDialog(values[0]);
if (pressedButton == DOOR) {
if (values[0].equals(getString(R.string.Door_Opened))) {
sentSucc();
pressedButton = INACTVE;
}
}
}
}
更新1
我在oncreate()connectTask conn ;
在onCreate中我拨打conn.execute(");
我也尝试将此调用转移到resume();
提前致谢
答案 0 :(得分:0)
将此代码放入 onPause()方法您的活动 此代码检查asynctask状态 如果在执行 onPause()时Asynctask正在运行,它将取消Asyctask Execution。 &安培;在 OnResume()方法中再次执行Asyctask。
connectTask mTask;
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
if (mTask != null && mTask.getStatus() != AsyncTask.Status.FINISHED)
{
mTask.cancel(true);
}
}
修改:
@Override
protected void onResume(){
// TODO Auto-generated method stub
super.onResume();
mTask = new connectTask();
mTask.execute();
}
答案 1 :(得分:0)
您应该在 onResume()方法中执行AsyncTask
;因为当你从第一个地方开始活动时,它会被调用,和,当你实际从暂停中恢复时。
应该看起来像这样:
@Override
public void onResume(){
// ...
new connectTask ().execute();
}
请注意我们匿名执行它的方式,并且我们在构造函数中使用new
关键字,因为我们需要创建一个异步任务对象才能执行它。
答案 2 :(得分:0)
您应该在onResume()
方法中调用asynctask。因为在创建活动时onCreate()
之后调用此方法,并且当从另一个活动恢复活动时调用此方法。
你应该像跟随
一样打电话给你的asynctask@Override
public void onResume()
{
new connectTask ().execute();
}
希望它会对你有所帮助。