Di seguito è riportata la funzione sendNotification che verrà chiamata da un servizio, sta funzionando correttamente creando una notifica e mostrandola sulla barra di stato. Ma quando l'app è già in esecuzione (sono a MainActivity), facendo clic sulla notifica per aprire ConversActivity, la MainActivity principale viene distrutta, e quando im premendo back button da ConversActivity, viene ricreata MainActivity. Per favore aiutatemi a evitare questo comportamento quando l'app è in esecuzione (in primo piano/sfondo)Android: Perché fare clic su notifica di intenti con backstack distrugge MainActivity principale?
Btw, questo è il comportamento corretto quando l'app viene uccisa o non in esecuzione, coz MainActivity viene creato dal backstack, che è corretto . Ma quando l'app è in esecuzione, perché MainActivity viene distrutto e ricreato? Ciò non è efficiente e causa lentezza nell'app a causa dell'avvio dell'app da parte di onCreate di MainActivity.
Grazie in anticipo & I migliori saluti.
AndroidManifest.xml:
<activity
android:name=".View.MainActivity"
android:hardwareAccelerated="true"
android:windowSoftInputMode="stateHidden"
android:launchMode="singleTop"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".View.ConversActivity"
android:label="@string/title_activity_convers"
android:parentActivityName=".View.MainActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".View.MainActivity"/>
</activity>
-
ConversActivity.java (tasto indietro):
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
switch (item.getItemId()) {
case android.R.id.home:
//onBackPressed();
//finish();
NavUtils.navigateUpFromSameTask(this);
return true;
case R.id.action_settings:
return true;
}
return super.onOptionsItemSelected(item);
}
-
public static void sendNotification(Context context, String dname) {
NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Intent intent = new Intent(context, ConversActivity.class);
intent.putExtra("dname", dname);
PendingIntent pendingIntent = TaskStackBuilder.create(context)
// add all of DetailsActivity's parents to the stack,
// followed by DetailsActivity itself
.addNextIntentWithParentStack(intent)
.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("You've got a message!")
.setStyle(new NotificationCompat.BigTextStyle().bigText("@" + dname + ": " + msg))
.setContentText("@" + dname + ": " + msg)
.setAutoCancel(true)
.setVibrate(new long[]{100, 100}) //off-on-off-on-off
.setLights(Color.GREEN, 3000, 3000)
.setSound(Settings.System.DEFAULT_NOTIFICATION_URI);
;
mBuilder.setContentIntent(pendingIntent);
mNotificationManager.notify(dname, 0, mBuilder.build());
}
Avete controllato quando spostate ConversActivity in mainactivity, la vostra attività principale dovrebbe essere entrata in scena non in oncreate ?? – Mahi
sì, ho inserito un log.d e eseguito il debug in onCreate e onDestroy di MainActivity, nel momento in cui clicco sulla notifica, vedo onDestroy viene attivato, quindi quando faccio clic su back-button da ConversActivity, onCreate viene attivato nuovamente . Potrebbe esserci qualcosa di sbagliato nel mio backstack e in attesaIntent? – hemlk