Activity页面变暗并且不可点击只能返回的问题

场景:一个Activity请求网络,当出现网络问题请求出错时,会弹出一个Dialog提示。但是,在结果返回之前就跳到了另一个Activity,使得之前那个Activity处于后台,此时如果回到之前的Activity会出现页面变暗,而且任何地方不能点击的现象。这是由于Activity处于后台,弹Dialog遇到问题没有弹出来,但是页面已经变暗了,并抢占了焦点,使得底部的控件看得见但不可点击。给人的感觉就是App死机了,只有点返回键才能激活页面。查了半天,只遇到一个知己遇到和我一样的问题,并提出来了。有人给了一些方案。如下:https://www.iteye.com/problems/77129

我的场景不太一样,Dialog弹出没有那么重要,极端情况下Dialog可以不弹出,只要页面不变暗并且不可点击。所以我的思路是:只要Activity不是可见的,就不在当前Activity上调用弹出Dialog的操作。具体操作如下:

在我的网络请求框架MyGernericCallback上作如下判断:

       //只有当Activity处于前台时,才在当前Activity上弹Dialog
        if (IsActivityForegroundUtil.isForeground((Activity) mContext)) {
            try {
                dialog.show();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

IsActvityForegroundUtil.java

import android.app.Activity;
import android.app.ActivityManager;
import android.content.ComponentName;
import android.content.Context;
import android.text.TextUtils;

import java.util.List;

public class IsActivityForegroundUtil {

    /**
     * 判断某个界面是否在前台
     *
     * @param activity 要判断的Activity
     * @return 是否在前台显示
     */
    public static boolean isForeground(Activity activity) {
        return isForeground(activity, activity.getClass().getName());
    }

    /**
     * 判断某个界面是否在前台
     *
     * @param context   Context
     * @param className 界面的类名
     * @return 是否在前台显示
     */
    public static boolean isForeground(Context context, String className) {
        if (context == null || TextUtils.isEmpty(className))
            return false;
        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningTaskInfo> list = am.getRunningTasks(1);
        if (list != null && list.size() > 0) {
            ComponentName cpn = list.get(0).topActivity;
            if (className.equals(cpn.getClassName()))
                return true;
        }
        return false;

    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值