startActivity(Intent)每次都在破坏活动,为什么?

时间:2018-04-05 18:23:45

标签: android android-intent android-pendingintent

正如标题所说,通常只有在手机需要释放内存时才会调用onDestroy()。

我的流程:活动(A)设置定期闹钟以在A的onCreate方法中向用户发送通知:

public void startEMAAlarm(){
    Log.d(TAG, "startEMAAlarm: in start ema alarm");

    Calendar cal = Calendar.getInstance();
    long when = cal.getTimeInMillis();

    cal.setTimeInMillis(System.currentTimeMillis());
    cal.set(Calendar.HOUR_OF_DAY, 8);
    cal.set(Calendar.MINUTE, 30);

    AlarmManager alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(this, EMAAlarmReceiver.class);
    startEMAIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
    alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 1000 * 60 * 20, startEMAIntent);
    Log.d(TAG, "startEMAAlarm: alarm shjould be set");
    alarmStarted = true;


}

警报接收器获取此信息,发送通知,如果选择了通知,它将启动活动B:

EMAAlarmReceiver: 的onReceive {

Intent resultIntent = new Intent(context, EMA.class);
        //resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, resultIntent, 0);

        NotificationCompat.Action action = new NotificationCompat.Action.Builder(R.drawable.cdmh_small, "SNOOZE", snoozePendingIntent).build();

        Notification mBuilder =
                new NotificationCompat.Builder(context, CHANNEL_DI)
                        .setSmallIcon(R.drawable.noti_icon)
                        .setContentTitle("EMA")
                        .setAutoCancel(true)
                        .setContentText("Time for another EMA :)")
                        .setOngoing(true)
                        .setChannelId(CHANNEL_DI)
                        .setSound(uri)
                        .setContentIntent(pendingIntent)
                        .addAction(action)
                        .build();

        mNotificationManager.notify("first",1, mBuilder);
        Log.d(TAG, "onReceive OREO: should be notification built now");

然后通知出现在手机上,但是一旦我点击它,活动A就会调用它的onDestroy()方法,我不知道为什么。

这并不重要,因为我可以使用savedInstance等稍后重新创建它(即活动B在离开时通过另一个Intent返回活动A), 但我不确定为什么它会在那时被摧毁。正如你所看到的,我目前没有使用任何标志,但我已经尝试了很多标志,而且它似乎没有改变行为。

不确定是否重要,但活动B只是用户滑过的SeekBars集合,然后将其值保存到文本文件,然后返回活动A

活动A在Manifest中的外观:

<activity
        android:name="com.anysoftkeyboard.ui.settings.setup.FinishInstallScreen"
        android:screenOrientation="portrait">

活动B的外观如何:

<activity android:name="com.radicalninja.logger.EMA"
              android:screenOrientation="portrait"/>

1 个答案:

答案 0 :(得分:0)

好的,对于任何可能随机遇到此问题的人来说,这都是由我自己的愚蠢造成的。

基本上我对我的应用程序进行了一些更改,并且忘记更新我的通知的TaskStackBuilder部分,所以我正在构建父堆栈错误。

这导致每次都调用onDestroy()方法调用活动。