Активность не возвращается из Pause

У меня есть приложение с тремя действиями: splashscreen (по умолчанию), login, main. Приложение начинается с всплеска, через несколько секунд меняется на логин. Если процесс входа в систему верен, мы переходим к основному.

Моя проблема заключается в том, что активность входа не может быть восстановлена ​​из приостановленного состояния. Когда я нажимаю кнопку «Домой», onPause () вызывается правильно, а onDestroy () не вызывается. Затем, когда вы пытаетесь вернуться к приложению, он начинается с всплеска, но не доходит до входа в систему, он просто возвращается в Home. Logcat не показывает никакой ошибки, и отладчик утверждает, что приложение все еще открыто (как и должно). Ожидается поведение на всплеске и основных экранах.

public class LoginActivity extends Activity { /* UI ELEMENTS */ private OnClickListener mOnClickListener; private EditText mPasswordField; private EditText mUserField; private ProgressDialog mProgressDialog; /* LOGIC ELEMENTS */ /** handler to update interface */ private static Handler sInterfaceUpdateHandler; public static class UpdateHandler extends Handler { private final WeakReference<LoginActivity> mLogin; UpdateHandler(final LoginActivity loginActivity) { super(); mLogin = new WeakReference<LoginActivity>(loginActivity); } /** * handle events from other threads in UI thread. * * @param message message data. Property what determines action. */ @Override public void handleMessage(final Message message) { // STUFF HERE } @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.initializeInterface(); // fields filled here, listener added to buttons } 

EDIT: создание активности в SplashScreen по запросу

  public class SplashScreen extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.splashscreen); final Thread splashThread = new Thread() { @Override public void run() { try { int waited = 0; while (waited < 2000) { sleep(100); waited += 100; } } catch (final InterruptedException catchException) { LoggerFactory.consoleLogger().printStackTrace(catchException); } SplashScreen.this.finish(); final Intent loginIntent = new Intent(SplashScreen.this, LoginActivity.class); SplashScreen.this.startActivity(loginIntent); } }; splashThread.start(); } 

}

Ошибка найдена и исправлена. В манифесте активность была отмечена как SingleInstance. Я изменил его на SingleTop, и теперь он работает так, как ожидалось.

Более подробную информацию о причинах можно найти здесь: http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

Удалите блок finally из SplashActivity и как SplashActivity ниже:

 final Thread splashThread = new Thread() { @Override public void run() { try { int waited = 0; while (waited < 2000) { sleep(100); waited += 100; } } catch (final InterruptedException catchException) { LoggerFactory.consoleLogger().printStackTrace(catchException); } SplashScreen.this.finish(); final Intent loginIntent = new Intent(SplashScreen.this, LoginActivity.class); SplashScreen.this.startActivity(loginIntent); } }; splashThread.start(); 

Я не играл много потоков, но из того, что мне кажется, вы создаете еще один поток из Splash Activity, а затем запускаете активность из этого потока. Затем, когда вы переходите на паузу, ваша новая деятельность каким-то образом теряется или собирается мусор (возможно, потому, что она не находится в основном потоке, который я не знаю), тогда, когда вы возвращаетесь к предыдущему действию, onCreate не вызывается снова, поэтому у вас есть это Вечный SplashScreen (если я правильно понимаю вашу проблему).

Измените также, я должен спросить, почему вы ждете внутри этого потока?

Intereting Posts