我有活动,并在清单
中设置了以下特殊属性<activity
android:name=".LightUp"
android:excludeFromRecents="true"
android:launchMode="singleInstance"
android:noHistory="true"
android:process=":listener"
android:taskAffinity="" >
</activity>
在此活动中,我正在安排 AlarmManager 使用此 PendingIntent 在一段时间后自行调用。 AlarmManager 是必要的,因为当此活动在屏幕上时手机会进入睡眠状态,我不想拿着唤醒锁。
pendingIntent = PendingIntent.getActivity(this, 10,
new Intent(this, LightUp.class)
.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT),
PendingIntent.FLAG_UPDATE_CURRENT);
因此,当警报管理器触发时,我像往常一样在 onNewIntent()函数中获取新的Intent。这意味着意图正在进行相同的活动。 问题是在 onNewIntent 之后活动被破坏了。即使我在 onNewIntent 中完全没有代码,我也可以从日志中看到无论如何都会调用 onDestroy 。
所以问题是为什么Destroy被召唤?我该怎么做才能让活动继续运行?
答案 0 :(得分:0)
试试这个
清单 中的活动
<activity
android:name=".LightUp"
android:launchMode="singleTop"
</activity>
Java代码
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
}
答案 1 :(得分:0)
试试这个: -
<activity
android:launchMode="singleTask" >
</activity>
默认情况下,如果您使用intent调用活动,则即使另一个实例已在运行,也会创建并显示该活动的新实例。为避免这种情况,必须标记活动,不应多次实例化。要实现此目的,您必须将活动的launchMode设置为singleTask
。
答案 2 :(得分:0)
看起来我找到了罪魁祸首。这是导致问题的 noHistory 属性。 官方文件说
android:noHistory ::当用户是否应该从活动堆栈中删除活动并完成(其finish()方法被调用)导航远离它,它在屏幕上不再可见
嗯,从技术上讲,我在调用PendingIntent时没有离开屏幕,很奇怪,正在调用终点。删除 noHistory 后,它不会破坏。