Итак, вкратце, мое приложение имеет следующую процедуру запуска:
При запуске -> Запускает StartupActivity
StartupActivity -> Запускает MyService (startService, длительный запуск)
MyService подает некоторыетекст для StartupActivity, пока MyService не установит TCP-соединение с сервером
MyService затем запустит следующее действие, LoginActivity
LoginActivity отправит пакет входа в систему (через MyService), а когда ответ получен (в MyService), MyService запустит следующее действие, MainActivity,Итак:
StartupActivity -> LoginActivity -> MainActivity
|
+ ---> MyService
Тогда MainActivity является единственным действующим действием.
У меня есть несколько проблем:
1) Если я в любой момент времени нажму кнопку HOME, а затем захочу вернуться в приложение (щелкнув значок приложения), я хочу вернуться к любой активности, которая былавиден до нажатия кнопки HOME.Это может быть StartupActivity, LoginActivity или MainActivity.
Однако, если я нажимаю кнопку HOME, когда я нахожусь в LoginActivity, я всегда возвращаюсь к StartupActivity (даже если это завершило работу () и LoginActivity запускается с * Intent.FLAG_ACTIVITY_NEW_TASK *)
2) Я также заметил, что onCreate StartupActivity всегда выполняется, когда я возвращаюсь в приложение (как описано в 1 выше).Я ожидал, что StartupActivity.onCreate будет выполнен только один раз (если только он не был уничтожен, чего в данном случае нет).Когда я нажимаю значок запуска, запускается onCreate, а после этого onDestroy.Я понятия не имею, почему.
3) Каков наилучший подход для принудительного включения приложения в действие, которое должно быть «текущим»?Средство запуска - StartupActivity, но в большинстве случаев я хотел бы, чтобы LoginActivity или MainActivity отображались (если бы мы пришли в это состояние).
Любые советы и указатели приветствуются =)
Iдумал, что мне следует опубликовать некоторый код, но там нет ничего странного, странного или даже продвинутого.Поэтому я просто опубликую некоторые материалы, чтобы они были перед вами.
MyService.onCreate
public void onCreate(){
super.onCreate();
SRef.clientHandlerLS = new ClientHandler(); // my TCP connection
startupProgressIntent = new Intent("STARTUP_PROGRESS_MESSAGE");
loginProgressIntent = new Intent("LOGIN_PROGRESS_MESSAGE");
mainIntent = new Intent("MAIN_MESSAGE");
ANDROID_ID = Secure.getString(this.getContentResolver(), Secure.ANDROID_ID);
addTextToStartup("Sometext...\n");
loginHandler = new Handler();
startupHandler = new Handler();
createNotification("Starting...", "Starting...", true);
SRef.myService = myBinder;
startupHandler.postDelayed(startupStuff, 1000);
}
Вот так я запускаю LoginActivityот MyService
Intent myIntent = new Intent(MyService.this, LoginActivity.class);
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
MyService.this.startActivity(myIntent);
StartupActivity.onCreate
@Override
protected void onCreate(android.os.Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.startup);
tv = (TextView)findViewById(R.id.textViewStartupData);
tv.append("StartupActivity.onCreate\n");
registerReceiver(connectionReceiver, new IntentFilter("STARTUP_PROGRESS_MESSAGE"));
registerReceiver(connectionReceiver, new IntentFilter("STARTUP_FINISH"));
registerReceiver(connectionReceiver, new IntentFilter("SERVICE_CONNECTED"));
startService(new Intent(StartupActivity.this, MyService.class));
}