项目要求是这样的,一个Activity用来展示信息,根据信息状态的不同该Activity显示的内容也不同。现在如果出现信息状态相同的情况,要把前面一个Activity销毁掉。所以我的策略是在Application中创建一个HashMap,用键值存储Activity。当有新的Activity进来的时候我们把它销毁掉。代码如下
// 添加报警Activity-在onCreate中调用
public void addAlertActivity(String activityname, Activity activity) {
Activity result = AlertActivityList.get(activityname);
if (result == null) {
Log.e("addAlertActivity1", activityname);
AlertActivityList.put(activityname, activity);
} else {
result.finish();
result = null;
AlertActivityList.put(activityname, activity);
}
}
// 移除报警页面存储 - 在 onDestroy中调用
public void removeAlertActivity(String activityname) {
AlertActivityList.remove(activityname);
}
但是出现了一个很奇怪的问题,我每次调用完打生命周期发现我调用finish方法并不是马上就调用了OnDestroy,最直观的例子就是我上面一个Activity销毁后,原本应该要被销毁的Activity还在。如果我慢点销毁最上层的Activity,等到下面的Activity出现了OnDestroy的时候,下面就没有了。
Acitivity的代码如下
protected void onCreate(Bundle savedInstanceState) {
((AniniApplication)getApplication()).addAlertActivity(alert_eid+tag, this);
}
onDestroy{
((AniniApplication)getApplication()).removeAlertActivity(alert_eid+tag);
}
至于Activity启动是在服务中启动的
it = new Intent(getBaseContext(), alert.class);
it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplication().startActivity(it);
我Activity使用了Dialog样式
<style name="MyDialogStyle" parent="@android:style/Theme.Dialog">
<item name="android:windowBackground">@android:color/transparent</item> <!-- //设置dialog的背景,此处为系统给定的透明值 -->
<item name="android:windowFrame">@null</item> <!-- //Dialog的windowFrame框为无 -->
<item name="android:windowNoTitle">true</item> <!-- // 是否显示标题 -->
<item name="android:windowIsFloating">true</item> <!-- //// 是否浮现在activity之上 -->
<item name="android:windowIsTranslucent">true</item> <!-- // 是否半透明 -->
<item name="android:windowContentOverlay">@null</item> <!-- // 是否有覆盖 -->
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> <!-- 设置Activity出现方式 -->
<!-- <item name="android:backgroundDimEnabled">true</item> --> <!-- // 背景是否模糊显示 -->
</style>
请教一下这是什么问题,还有就是怎么尽快把那个页面销毁掉