当活动恢复时,Asynctask不连接

时间:2013-12-19 09:24:53

标签: android

我有一个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 ;

上面定义了asynk任务

在onCreate中我拨打conn.execute(");

我也尝试将此调用转移到resume();

提前致谢

3 个答案:

答案 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();
}

希望它会对你有所帮助。