[Blankj/AndroidUtilCode]Tinker和utils的冲突(1.28.1)

2024-07-15 914 views
6
描述需求

简洁地描述下需求。 原来一直使用的是1.24版本,昨天升级到1.28.1后发现app不能正常运行,项目中使用了tinker utils的init方法会调用application的registerActivityLifecycleCallbacks,此时的application是tinkerApplication,在tinkerApplication的onCreate方法中会将"android.app.ActivityThread""android.app.LoadedApk"中的application替换为我自定义的myApplication,所以utils中的ActivityLifecycleCallback将不会调用,导致ActivityUtils中的方法出错。 1.24的初始化方法:

    public static void init(final Application app) {
        if (sApplication == null) {
            if (app == null) {
                sApplication = getApplicationByReflect();
            } else {
                sApplication = app;
            }
            sApplication.registerActivityLifecycleCallbacks(ACTIVITY_LIFECYCLE);
        } else {
            if (app != null && app.getClass() != sApplication.getClass()) {
                sApplication.unregisterActivityLifecycleCallbacks(ACTIVITY_LIFECYCLE);
                ACTIVITY_LIFECYCLE.mActivityList.clear();
                sApplication = app;
                sApplication.registerActivityLifecycleCallbacks(ACTIVITY_LIFECYCLE);
            }
        }
    }

1.24sApplication有值也可以再次赋值。我会在myApplication中手动再调用一次,ActivityLifecycleCallback会绑定到myApplication.

1.28的初始化方法:

  public static void init(final Application app) {
         if (sApp != null) return;
         sApp = app;
         UtilsBridge.init();
     }

1.28 sApp有值就不可以赋值。

可借鉴的

如果有的话,可以给出一些参考文章、链接、代码 tinker

回答

9

??我 24 之前早就有 Provider 了,应该不是这个问题导致的吧。

6

额,我更新了下问题,大佬看下

0

那就是需要判断下 class 是吗?然后还是需要你自己 init 才行

4

1.24我自己调用init就正常了,而在1.28中,手动init不行,因为sApp有值会被返回

6

所以我说需要判断下 class。

0

你试下 1.28.3 吧