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 可能会终止进程。
我有一个已经可见的 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 可能会终止进程。