来自通知的开放活动与Android中的活动生命周期有关

时间:2016-11-04 15:02:00

标签: android android-activity activity-lifecycle

我正在开发一款Android应用。在我的应用中,我在点击通知时打开活动。

我有两个活动 - MainActivity和SecondActivity

主要活动可以打开SecondActivity

在SecondActivity上OnBackPressed,MainActivity将显示回来它是打开SecondActivity的活动。 OnBackPressed的MainActivity,应用程序将退出。它是默认活动应用程序首先启动。现在我遇到了问题,因为我正在从服务内部打开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());
    }

问题是当我从服务和OnBackPressed打开SecondActivity时,应用程序退出。我想要做的是当我按下SecondActivity中的后退按钮时,我总是想打开MainActivity。所以我尝试的是覆盖SecondActivity的onBackPressed。我在onBackPressed中启动MainActivity。但问题是当我从通知中打开SecondActivity,然后按回按钮时,它会打开MainActivity。

但是当我按下后退按钮时,它会打开SecondActivity。我可以做些什么来使MainActivity始终在SecondActivity的OnBackPressed中打开,而不会像现在一样发生活动周期的问题。

这是Manifest中的SecondActivity

<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>

这是onBackPressed of SecondActivity

@Override
public void onBackPressed() {
    Intent intent = new Intent(getApplicationContext(),MainActivity.class);
    startActivity(intent);
}

1 个答案:

答案 0 :(得分:1)

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();
}