AndroidUtilCode UtilsActivityLifecycleImpl里对Application生命周期的监听

uz75evzq  于 2022-10-21  发布在  Android
关注(0)|答案(3)|浏览(139)

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

cuxqih21

cuxqih211#

@Blankj 求大神指导一下

wwwo4jvm

wwwo4jvm2#

想到解决办法了,在activity里的onstop中再把window模式修改回我自己想要的。

wr98u20j

wr98u20j3#

还是有些小问题。。。。。大神,可以解释一下为什么要在生命周期里修改window模式么。。。。

相关问题