onStart 调用两次,中间没有 onStop?

onStart invoked twice with no onStop in between?

我有一个已经可见的 activity(所以 onStart 有 运行),我拉下通知栏,单击与所述 activity 的待处理意图关联的通知。 1) onPause 被调用。请注意,不会调用 onStop 2) 为 activity 的新实例调用 onCreate,然后调用 onStart,等等...

正如建议的那样,我尝试了 singleTask 和 singleInstance,但它们不会阻止在调用 onPause 后创建新实例。有趣的是,只有当 activity 可见并且我单击它的通知时才会发生这种情况。如果它已经停止,Android 使用旧实例。也许我需要调整 PendingIntent 的生成方式...

我认为当您 运行 Pending Intent 时,可能会在堆栈中创建一个新的 Activity。配置您的 activity,使其不会通过设置为 singleTask 或 singleInstance 的 launchMode 创建新的 Activity。

这是我用于 activity:

的设置示例
<activity
            android:name="com.zakimak.HomeScreenActivity"
            android:screenOrientation="portrait"
            android:label="@string/app_name"
            android:launchMode="singleTask" />

然后构建pending intent如下:

    Intent resultIntent = new Intent(context, HomeScreenActivity.class);
    // The request code 24601  uniquely identifies the notification generated 
    // by the application. As an application may generate several having        
    //different codes to identify each. CAUTION: It's value should be greater than 0 
    //.i.e. RESULT_FIRST_USER+

    PendingIntent resultPendingIntent = PendingIntent.getActivity(context,
            24601, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);

    Notification notification = new NotificationCompat.Builder(context)
            .setSmallIcon(R.drawable.ic_launcher).setContentTitle("Title")
            .setContentText("Bla bla").setOngoing(true)
            .setTicker("Bla bla is running").setAutoCancel(false)
            .setContentIntent(resultPendingIntent).build();

第 1 步:我启动应用程序并显示 HomeScreenActivity。然后我拖动通知栏并单击通知。它打开 Activity 并调用以下回调方法:onPause,然后是 onResume。调用 onPause 是因为 activity 在抽屉下仍然可见。

第 2 步:我启动应用程序并显示 HomeScreenActivity 并按 Home 或启动另一个 activity,然后调用 onStop。然后我拖动通知栏并单击通知。它打开 Activity 并调用以下回调方法:onStart 和 onResume。

在这两种情况下,当 Activity 为第一次迭代启动时,仅调用一次 onCreate。已在模拟器中测试。

在某些情况下,当您的设备负载很重或试图节省电量时,Android 可能会终止进程。