Android:如果将 Activity 带回屏幕上,通知中的 PendingIntent 不会触发 onCreate()
Posted
技术标签:
【中文标题】Android:如果将 Activity 带回屏幕上,通知中的 PendingIntent 不会触发 onCreate()【英文标题】:Android: PendingIntent from Notification doesn't trigger the onCreate() if bringing Activity back on Screen 【发布时间】:2013-02-20 03:56:23 【问题描述】:我猜我对 Intent Flags 有一些误解。我想做的是,我有一个无线电流应用程序,它有两个活动(PlayerApplication 和 SettingsScreen)。我有一个 Service.class 用于在后台运行的 Streaming,它也包含一个通知(您可以在通知覆盖菜单和 PlayerApplication 中停止/开始播放)。如果用户点击通知,PlayerApplicationActivity 应该返回屏幕。
一切正常,期待这种情况:用户打开 SettingsScreenActivity -> 打开 NotificationOverlayMenu -> 点击通知 -> PendingIntent 恢复到 PlayerApplicationActivity
现在,PlayerApplicationScreen 在那里,但我无法单击任何内容。我看到,如果我从通知恢复,我的 PlayerApplication 的 onCreate() 不会被触发。但是布局看起来不错(也在 onCreate() 中膨胀)
我在 Service.class 中使用了以下 PendingIntent:
PendingIntent contentIntent = PendingIntent.getActivity(
this.getApplicationContext(), //Service.class
0,
new Intent(this,PlayerApplicationActivity.class)
.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP),
0);
所以实际上 PendingIntent 应该将 Activity(如果已经运行)带回顶部。我使用了错误的 Intent 还是漏掉了一点?
编辑: 我在 Manifest.xml 中声明了 launchMode
android:launchMode="singleTask"
【问题讨论】:
既然您已经为您的Activity
声明了android:launchMode="singleTask"
,并且它已经在运行,您将收到onNewIntent
回调而不是onCreate
【参考方案1】:
根据android开发人员site,在FLAG_ACTIVITY_CLEAR_TOP
,FLAG_ACTIVITY_SINGLE_TOP
和启动模式下:SingleTask
,如果您正在调用的活动实例已经在运行,那么它不会创建新实例,而是调用@987654325 @ 方法。所以我认为你应该检查当 onCreate() 没有调用时你的活动正在运行的情况。
【讨论】:
天哪!我所有的研究终于有了结果!!谢谢!听我说...只需覆盖 onNewIntent() 并执行您在 onCreate 方法中所做的操作!!!!!!! 万岁,你拯救了我的一天,非常感谢你发布这个。【参考方案2】:我刚刚发现我做错了什么:
出于我的目的,我使用了错误的启动模式。右边是singleTop
不是singleTask
我在<application-node>
而不是<activity-node>
中声明了launchMode
//Manifest.xml
<activity
android:name="..."
android:launchMode="singleTop" >
【讨论】:
以上是关于Android:如果将 Activity 带回屏幕上,通知中的 PendingIntent 不会触发 onCreate()的主要内容,如果未能解决你的问题,请参考以下文章
Android PendingIntent 启动Activity
android屏幕旋转需加载不同的界面文件,如何保存原界面的数据。