从通知打开 activity 在 Android 中的 Activity 生命周期有问题
Opening activity from notification has issue with Activity Life Cycle in Android
我正在开发一个 Android 应用程序。在我的应用程序中,我在单击通知时打开 Activity。
我有两个 activity - MainActivity 和 SecondActivity
主要Activity可以开SecondActivity
OnBackPressed on SecondActivity,MainActivity会显示回来它是打开SecondActivity的activity。 MainActivity的OnBackPressed,应用程序将退出。这是默认的 activity 应用程序首先启动。现在我遇到了问题,因为我正在从服务内部打开 SecondActivity。
这就是我从服务
打开SecondActivity的方式
private void showTrollPostNotification(String message)
{
notification = new NotificationCompat.Builder(getApplicationContext());
notification.setAutoCancel(true);
notification.setSmallIcon(R.mipmap.ic_launcher);
notification.setWhen(System.currentTimeMillis());
notification.setTicker(message);
notification.setContentTitle(getApplication().getResources().getString(R.string.app_name));
notification.setContentTitle(message);
Intent i = new Intent(getApplicationContext(), SecondActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(),0,i,PendingIntent.FLAG_UPDATE_CURRENT);
notification.setContentIntent(pendingIntent);
NotificationManager nm = (NotificationManager)getApplicationContext().getSystemService(getApplicationContext().NOTIFICATION_SERVICE);
nm.notify(1,notification.build());
}
问题是,当我从服务和第二个 Activity 的 OnBackPressed 打开时,应用程序退出。我想做的是,当我在 SecondActivity 中按下后退按钮时,我总是想打开 MainActivity。所以我尝试的是覆盖 SecondActivity 的 onBackPressed。我在 onBackPressed 中启动 MainActivity。但问题是当我从通知中打开 SecondActivity,然后按后退按钮时,它会打开 MainActivity.
但是当我按下后退按钮时,它会打开 SecondActivity 返回。我该怎么做才能让 MainActivity 始终在 SecondActivity 的 OnBackPressed 中打开,而不会出现 Activity 循环的问题,就像现在发生的那样。
这是清单
中的第二个Activity
<activity
android:noHistory="true"
android:label="Post Details"
android:name=".SecondActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
这是第二个的onBackPressedActivity
@Override
public void onBackPressed() {
Intent intent = new Intent(getApplicationContext(),MainActivity.class);
startActivity(intent);
}
发生的事情是 SecondActivity
进入历史后台。所以在你的情况下 SecondActivity
不需要在后台。为此,您可以在 Manifest.xml
中标记 noHistory="true"
<activity
android:name=".YourSecondActivity"
android:noHistory="true" />
编辑:通常您不需要这样做,因为 noHistory="true"
会这样做,但您可以尝试调用 finish()
.
@Override
public void onBackPressed() {
Intent intent = new Intent(this,MainActivity.class);
startActivity(intent);
finish();
}
我正在开发一个 Android 应用程序。在我的应用程序中,我在单击通知时打开 Activity。
我有两个 activity - MainActivity 和 SecondActivity
主要Activity可以开SecondActivity
OnBackPressed on SecondActivity,MainActivity会显示回来它是打开SecondActivity的activity。 MainActivity的OnBackPressed,应用程序将退出。这是默认的 activity 应用程序首先启动。现在我遇到了问题,因为我正在从服务内部打开 SecondActivity。
这就是我从服务
打开SecondActivity的方式private void showTrollPostNotification(String message)
{
notification = new NotificationCompat.Builder(getApplicationContext());
notification.setAutoCancel(true);
notification.setSmallIcon(R.mipmap.ic_launcher);
notification.setWhen(System.currentTimeMillis());
notification.setTicker(message);
notification.setContentTitle(getApplication().getResources().getString(R.string.app_name));
notification.setContentTitle(message);
Intent i = new Intent(getApplicationContext(), SecondActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(),0,i,PendingIntent.FLAG_UPDATE_CURRENT);
notification.setContentIntent(pendingIntent);
NotificationManager nm = (NotificationManager)getApplicationContext().getSystemService(getApplicationContext().NOTIFICATION_SERVICE);
nm.notify(1,notification.build());
}
问题是,当我从服务和第二个 Activity 的 OnBackPressed 打开时,应用程序退出。我想做的是,当我在 SecondActivity 中按下后退按钮时,我总是想打开 MainActivity。所以我尝试的是覆盖 SecondActivity 的 onBackPressed。我在 onBackPressed 中启动 MainActivity。但问题是当我从通知中打开 SecondActivity,然后按后退按钮时,它会打开 MainActivity.
但是当我按下后退按钮时,它会打开 SecondActivity 返回。我该怎么做才能让 MainActivity 始终在 SecondActivity 的 OnBackPressed 中打开,而不会出现 Activity 循环的问题,就像现在发生的那样。
这是清单
中的第二个Activity<activity
android:noHistory="true"
android:label="Post Details"
android:name=".SecondActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
这是第二个的onBackPressedActivity
@Override
public void onBackPressed() {
Intent intent = new Intent(getApplicationContext(),MainActivity.class);
startActivity(intent);
}
发生的事情是 SecondActivity
进入历史后台。所以在你的情况下 SecondActivity
不需要在后台。为此,您可以在 Manifest.xml
noHistory="true"
<activity
android:name=".YourSecondActivity"
android:noHistory="true" />
编辑:通常您不需要这样做,因为 noHistory="true"
会这样做,但您可以尝试调用 finish()
.
@Override
public void onBackPressed() {
Intent intent = new Intent(this,MainActivity.class);
startActivity(intent);
finish();
}