Blankj/AndroidUtilCode

UtilsActivityLifecycleImpl里对Application生命周期的监听

Open

#1,605 opened on 2022年2月10日

GitHub で見る
 (3 comments) (0 reactions) (1 assignee)Java (10,654 forks)batch import
help wanted

Repository metrics

Stars
 (33,679 stars)
PR merge metrics
 (30d に merged 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,这样会导致我的软键盘在切换桌面时无法保持一直显示状态。。。。。

コントリビューターガイド