Активность Android не запускается при втором запуске

#android #android-intent #android-activity

#Android #android-намерение #android-активность

Вопрос:

У меня есть два действия. Один — LoginScreen это, а другой — это MainScreen . После входа в систему я запускаю главный экран. На главном экране запускается метод асинхронного tcp-клиента onCreate . Затем я нажимаю кнопку «Назад», чтобы перейти на экран входа в систему. Затем я снова вхожу в систему, но в нем говорится, что TcpClient равен null. Я получаю новый экземпляр TcpClient при запуске activity onCreate, но он равен нулю. Вот мой код.

 //Main activity codes.
TCPClient mTcpClient;
protected void onCreate(Bundle savedInstanceState) {
        try {
            cnnTask = new connectTask();
            cnnTask.execute("");
        } catch (Exception e) {

        }
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_screen);
}
public class connectTask extends AsyncTask<String, String, TCPClient> {
 protected TCPClient doInBackground(String... message) {

        //we create a TCPClient object
        mTcpClient = new TCPClient(new TCPClient.OnMessageReceived() {
            @Override
            //here the messageReceived method is implemented
            public void messageReceived(String message) {
                //this method calls the onProgressUpdate
                srvrMessage = message;
            }
        });
        mTcpClient.run();

        return null;
    }
}
}
//LoginScreen code onClick.
@Override
public void onClick(View v) {
    switch (v.getId())
    {
        case R.id.btnLogin:
            intent = new Intent(LoginScreen.this,MainScreen.class);
            startActivity(intent);
            break;
    }
}
  

Как я уже упоминал ранее, при первом входе в систему запускается программа. Однако, когда я возвращаюсь к LoginScreen и пытаюсь снова войти в систему, новый mTcpClient имеет значение null.

Я пытался остановить mpTcpClient onDestroy и onStop метод действия на главном экране, но это не сработало. Как я могу решить эту проблему?

Комментарии:

1. Попробуйте переместить блок connectTask создания и выполнения из onCreate метода в onResume метод.

2. Не вижу проблемы. Каждый раз при запуске MainScreen TCPClient будет создаваться новый.

3. Да, это может создать новое соединение, но mTcpClient имеет значение null :/

Ответ №1:

Я нашел свою ошибку. Мой клиентский сервер TCP ожидает, пока с сервера не поступит байт. Таким образом, не имеет значения, отменять задачу. Он ожидает чтения байта. Я закрыл потоковый onCancelled метод задачи, и он работает.