如何判断这个activity是否可见?

要判断一个Activity是否可见,可以使用以下方法之一:
方法一: 使用Activity的isFinishing()和isDestroyed()方法以及getWindow().getDecorView().getWindowVisibility()来综合判断:

boolean isVisible = !isFinishing() && !isDestroyed() && getWindow().getDecorView().getWindowVisibility() == View.VISIBLE;
 

isFinishing():检查Activity是否正处于结束(finishing)过程中。
isDestroyed():检查Activity是否已被销毁。
getWindow().getDecorView().getWindowVisibility():获取Activity的根视图(DecorView)的可见性状态。当WindowVisibility为View.VISIBLE时,表示Activity对用户可见。
方法二: 对于支持API 14及以上版本的应用,可以使用ActivityLifecycleCallbacks来监听Activity的生命周期事件,并在回调中记录Activity的可见状态:
在您的Application类中(或创建一个专门的Application子类)注册一个ActivityLifecycleCallbacks:

public class MyApp extends Application {

    private boolean mActivityVisible;

    @Override
    public void onCreate() {
        super.onCreate();

        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
                // ...
            }

            @Override
            public void onActivityStarted(Activity activity) {
                if (activity instanceof YourActivity) {
                    mActivityVisible = true;
                }
            }

            @Override
            public void onActivityResumed(Activity activity) {
                if (activity instanceof YourActivity) {
                    mActivityVisible = true;
                }
            }

            @Override
            public void onActivityPaused(Activity activity) {
                if (activity instanceof YourActivity) {
                    mActivityVisible = false;
                }
            }

            @Override
            public void onActivityStopped(Activity activity) {
                if (activity instanceof YourActivity) {
                    mActivityVisible = false;
                }
            }

            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
                // ...
            }

            @Override
            public void onActivityDestroyed(Activity activity) {
                // ...
            }
        });
    }

    public boolean isYourActivityVisible() {
        return mActivityVisible;
    }
}
 

在需要判断Activity可见性的地方,通过((MyApp) getApplication()).isYourActivityVisible()获取状态:

if (((MyApp) getApplication()).isYourActivityVisible()) {
    // Activity is visible
} else {
    // Activity is not visible
}

方法三: 如果您的Activity嵌套在Fragment中,可以使用Fragment的getUserVisibleHint()方法判断:

if (getUserVisibleHint()) {
    // Fragment and its parent Activity are visible
} else {
    // Fragment or its parent Activity is not visible
}

请注意,getUserVisibleHint()在FragmentPagerAdapter或FragmentStatePagerAdapter等场景下更为适用,因为这些适配器会自动管理Fragment的可见性。
选择适合您项目需求的方法,即可准确判断Activity是否可见。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值