Цель запуска не всегда получалась правильно при запуске моего приложения для Android из другого приложения
У меня есть приложение (давайте назовем его "SendingApp"), которое пытается запустить мое приложение, вызывая его с помощью кнопки A:
Intent launchIntent = getPackageManager().getLaunchIntentForPackage("com.example.sendingapp");
launchIntent.putExtra("my_extra", "AAAA"));
startActivity(launchIntent);
и это на кнопке B:
Intent launchIntent = getPackageManager().getLaunchIntentForPackage("com.example.sendingapp");
launchIntent.putExtra("my_extra", "BBBB"));
startActivity(launchIntent);
В моем собственном приложении (назовем это "ReceivingApp") у меня есть активность запуска, определенная в манифесте как таковая:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
В методе onCreate моего класса MainActivity в ReceivingApp я получаю дополнительное и выводю его в TextView следующим образом:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = getIntent();
if(intent != null) {
Bundle extras = intent.getExtras();
if(extras != null && extras.getString("my_extra") != null){
((TextView)findViewById(R.id.test_text)).setText(extras.getString("my_extra"));
} else {
((TextView)findViewById(R.id.test_text)).setText("NORMAL START");
}
}
}
Запуск ReceivingApp обычно путем нажатия его значка или начала отладки в Eclipse работает нормально, а TextView читает "NORMAL START".
Когда я затем закрываю ReceivingApp, нажимая кнопку "Назад", захожу в SendingApp и нажимаю кнопку "A", ReceivingApp запускается и отображает AAAA, как и должно быть. Если я снова вернусь и нажму кнопку B, ReceivingApp запускается и отображает BBBB. Все идет нормально.
Когда я принудительно завершаю работу ReceivingApp либо в списке задач, либо в диспетчере приложений, а затем перехожу к SendingApp и нажимаю кнопку A, ReceivingApp запускается и отображает AAAA (по-прежнему правильно), но когда я затем возвращаюсь и нажимаю кнопку B, ReceivingApp запустит, но не вызовет onCreate, и, следовательно, не отобразит BBBB, но все равно покажет AAAA, точно так же, как оно было выведено на передний план, но не получило никакого намерения. Нажатие кнопки "Назад" в ReceivingApp также показывает, что ни один новый экземпляр MainActivity не был помещен в стек операций.
Закрытие ReceivingApp и запуск его нажатием на его значок исправляет это поведение. Но мне нужно, чтобы он мог получать разные намерения, даже когда он не работал, когда он получает первое намерение.
Кто-нибудь сталкивался с таким поведением раньше? Мой код для получения данных неверен или это может быть ошибка Android?