首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >通过PendingIntent调用的活动被自动销毁

通过PendingIntent调用的活动被自动销毁
EN

Stack Overflow用户
提问于 2015-10-02 17:05:08
回答 3查看 1.2K关注 0票数 1

我有一个活动,它在清单中设置了以下特殊属性

代码语言:javascript
代码运行次数:0
运行
复制
<activity
        android:name=".LightUp"
        android:excludeFromRecents="true"
        android:launchMode="singleInstance"
        android:noHistory="true"
        android:process=":listener"
        android:taskAffinity="" >
    </activity>

在这个活动中,我正在调度一个AlarmManager来使用这个PendingIntent在某个时候调用自己。AlarmManager是必要的,因为手机在屏幕上活动时会进入睡眠状态,而且我不想抱着唤醒器。

代码语言:javascript
代码运行次数:0
运行
复制
pendingIntent = PendingIntent.getActivity(this, 10,
                new Intent(this, LightUp.class)
                .setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT),
                PendingIntent.FLAG_UPDATE_CURRENT);

因此,当警报管理器触发时,我将像往常一样在onNewIntent()函数中获得新的意图。这意味着意图也开始了同样的活动。问题是活动在onNewIntent.之后被破坏即使我在onNewIntent,中完全没有代码,我也可以从日志中看到onDestroy正在被调用。

所以问题是为什么叫毁灭?我能做些什么来保持活动的正常进行?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-02 17:22:21

看来我找到凶手了。造成问题的是noHistory属性。官方文件上说

android:noHistory ::该活动是否应该从活动堆栈中移除并完成(它的finish()方法被调用),当用户导航离开它并且它在屏幕上不再可见时

嗯,从技术上讲,我打电话给PendingIntent时并没有离开屏幕,奇怪的是,finish被调用了。在移除noHistory之后,它并没有被摧毁。

票数 0
EN

Stack Overflow用户

发布于 2015-10-02 17:14:55

尝尝这个

Activity in Manifest

代码语言:javascript
代码运行次数:0
运行
复制
<activity
  android:name=".LightUp"
  android:launchMode="singleTop"
</activity>

Java代码

代码语言:javascript
代码运行次数:0
运行
复制
Intent notificationintent = new Intent(context, LightUp.class);
notificationintent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pIntent = PendingIntent.getActivity(context, (int) System.currentTimeMillis(), notificationintent, PendingIntent.FLAG_UPDATE_CURRENT);

@Override
protected void onNewIntent(Intent intent) {
  super.onNewIntent(intent);
  System.out.println("new intent received");
  // do what ever you want to do here
}
票数 0
EN

Stack Overflow用户

发布于 2015-10-02 17:20:49

试试这个:-

代码语言:javascript
代码运行次数:0
运行
复制
<activity
    android:launchMode="singleTask" >
</activity>

默认情况下,如果您有意调用某个活动,则将创建并显示该活动的新实例,即使另一个实例已经在运行。为了避免这种情况,必须将活动标记为,不应多次实例化。要实现这一点,您必须将活动的launchMode设置为singleTask

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32912291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档