Blankj/AndroidUtilCode

UtilsActivityLifecycleImpl里对Application生命周期的监听

Open

#1,605 创建于 2022年2月10日

在 GitHub 查看
 (3 评论) (0 反应) (1 负责人)Java (10,654 fork)batch import
help wanted

仓库指标

Star
 (33,679 star)
PR 合并指标
 (30 天内没有已合并 PR)

描述

在Utils里的init初始化后会自动绑定UtilsBridge.init(sApp),接着UtilsBridge的init里会绑定UtilsActivityLifecycleImpl public static void init(final Application app) { if (app == null) { Log.e("Utils", "app is null."); return; } if (sApp == null) { sApp = app; UtilsBridge.init(sApp); UtilsBridge.preLoad(); return; } if (sApp.equals(app)) return; UtilsBridge.unInit(sApp); sApp = app; UtilsBridge.init(sApp); }

static void init(Application app) { UtilsActivityLifecycleImpl.INSTANCE.init(app); }

在Application的生命周期里onstop和onresume里都会去调用processHideSoftInputOnActivityDestroy方法

private void processHideSoftInputOnActivityDestroy(final Activity activity, boolean isSave) { try { if (isSave) { Window window = activity.getWindow(); final WindowManager.LayoutParams attrs = window.getAttributes(); final int softInputMode = attrs.softInputMode; window.getDecorView().setTag(-123, softInputMode); window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); } else { final Object tag = activity.getWindow().getDecorView().getTag(-123); if (!(tag instanceof Integer)) return; UtilsBridge.runOnUiThreadDelayed(new Runnable() { @Override public void run() { try { Window window = activity.getWindow(); if (window != null) { window.setSoftInputMode(((Integer) tag)); } } catch (Exception ignore) { } } }, 100); } } catch (Exception ignore) { } }

不是很明白为什么要强制对界面设置SOFT_INPUT_STATE_ALWAYS_HIDDEN,这样会导致我的软键盘在切换桌面时无法保持一直显示状态。。。。。

贡献者指南