【问题标题】:Opening activity from notification has issue with Activity Life Cycle in Android从通知打开活动在 Android 中的活动生命周期存在问题
【发布时间】:2016-11-04 15:02:00
【问题描述】:

我正在开发一个 Android 应用程序。在我的应用中,当点击通知时,我会打开 Activity。

我有两个活动 - MainActivity 和 SecondActivity

主Activity可以打开SecondActivity

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

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

但是当我按下返回按钮时,它会打开 SecondActivity。我该怎么做才能让 MainActivity 始终在 SecondActivity 的 OnBackPressed 中打开,而不会出现现在发生的 Activity Cycle 问题。

这是清单中的 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>

这是 SecondActivity 的 onBackPressed

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

【问题讨论】:

    标签: android android-activity activity-lifecycle


    【解决方案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();
    }
    

    【讨论】:

    • 然后覆盖onBackPressed打开MainActivity?
    • @WaiYanHein 是的
    • 我在清单文件中添加了它。然后覆盖了第二个Activity的onBackPressed。不工作。他们在背压时不断打开对方。
    • @WaiYanHein 请发布您的清单 xml 和 onBackPressed 代码。
    • 谢谢,当我添加finish() 时,它起作用了。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2013-01-13
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    相关资源
    最近更新 更多