matrixth 2017-05-21 00:34 采纳率: 33.3%
浏览 2707
已结题

Android删除堆栈中的Activity问题

项目要求是这样的,一个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>

请教一下这是什么问题,还有就是怎么尽快把那个页面销毁掉

  • 写回答

4条回答 默认 最新

  • -无-怨-无-悔- 2017-05-21 14:03
    关注

    activity调用finish方法 会依次调用onPause、onStop、onFinish 可以看出finish方法掉是必然会有延迟
    个人觉得为了达到你的需求目的,可以设置activity的启动模式为singleTask,
    <activity android:name=".aivity" android:launchMode="singleTask

    评论

报告相同问题?

悬赏问题

  • ¥15 MATLAB动图的问题
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名