Blankj/AndroidUtilCode

UtilsActivityLifecycleImpl里对Application生命周期的监听

Open

#1,605 opened on Feb 10, 2022

View on GitHub
 (3 comments) (0 reactions) (1 assignee)Java (10,654 forks)batch import
help wanted

Repository metrics

Stars
 (33,679 stars)
PR merge metrics
 (No merged PRs in 30d)

Description

在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,这样会导致我的软键盘在切换桌面时无法保持一直显示状态。。。。。

Contributor guide