我有一个活动,它在清单中设置了以下特殊属性
<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()函数中获得新的意图。这意味着意图也开始了同样的活动。问题是活动在onNewIntent.之后被破坏即使我在onNewIntent,中完全没有代码,我也可以从日志中看到onDestroy正在被调用。
所以问题是为什么叫毁灭?我能做些什么来保持活动的正常进行?
发布于 2015-10-02 09:22:21
看来我找到凶手了。造成问题的是noHistory属性。官方文件上说
android:noHistory ::该活动是否应该从活动堆栈中移除并完成(它的finish()方法被调用),当用户导航离开它并且它在屏幕上不再可见时
嗯,从技术上讲,我打电话给PendingIntent时并没有离开屏幕,奇怪的是,finish被调用了。在移除noHistory之后,它并没有被摧毁。
发布于 2015-10-02 09:14:55
尝尝这个
Activity in Manifest
<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
}
发布于 2015-10-02 09:20:49
试试这个:-
<activity
android:launchMode="singleTask" >
</activity>
默认情况下,如果您有意调用某个活动,则将创建并显示该活动的新实例,即使另一个实例已经在运行。为了避免这种情况,必须将活动标记为,不应多次实例化。要实现这一点,您必须将活动的launchMode设置为singleTask
。
https://stackoverflow.com/questions/32912291
复制相似问题