DSAppTeam / Anchors

:white_check_mark: Anchors 是一个基于图结构,支持同异步依赖任务初始化 Android 启动框架。其锚点提供 "勾住" 依赖的功能,能灵活解决初始化过程中复杂的同步问题。参考 alpha 并改进其部分细节, 更贴合 Android 启动的场景, 同时支持优化依赖初始化流程, 自动选择较优的路径进行初始化。
Apache License 2.0
817 stars 79 forks source link

java.lang.NullPointerException: Attempt to invoke interface method 'void java.lang.Runnable.run()' on a null object reference #27

Closed Doikki closed 3 years ago

Doikki commented 3 years ago

java.lang.RuntimeException:Unable to create application com.stub.StubApp: java.lang.NullPointerException: Attempt to invoke interface method 'void java.lang.Runnable.run()' on a null object reference

2 android.app.ActivityThread.handleBindApplication(ActivityThread.java:6637) 3 ...... 4 Caused by: 5 java.lang.NullPointerException:Attempt to invoke interface method 'void java.lang.Runnable.run()' on a null object reference 6 com.effective.android.anchors.e.g(AnchorsRuntime.kt:87) 7 com.effective.android.anchors.b.b(AnchorsManager.kt:118) 8 com.effective.android.anchors.d.a(AnchorsManager.kt:291) 9 com.xxx.xxx.managers.l.b(LaunchManager.kt:142) 10 com.xxx.xxx.managers.l.a(LaunchManager.kt:93) 11 com.xxx.xxx.app.MyApplication.onCreate(MyApplication.java:97) 12 com.stub.StubApp.onCreate(SourceFile:118) 13 android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1122) 14 android.app.ActivityThread.handleBindApplication(ActivityThread.java:6619) 15 android.app.ActivityThread.-wrap2(Unknown Source:0) 16 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) 17 android.os.Handler.dispatchMessage(Handler.java:108) 18 android.os.Looper.loop(Looper.java:166) 19 android.app.ActivityThread.main(ActivityThread.java:7529) 20 java.lang.reflect.Method.invoke(Native Method) 21 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245) 22 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)

YummyLau commented 3 years ago

@Doikki 提供下你的链调用场景和写法,需要排除下业务是否主动清除队列的逻辑。

Doikki commented 3 years ago
    AnchorsManager.getInstance()
            .debuggable { EnvironmentManager.getInstance().isApkDebug }
            .taskFactory { Project.TaskFactory(GDTaskCreator) }
            .anchors { //必须在 Application onCreate 结束之前启动完成的任务
                arrayOf(
                        ACCOUNT,
                        PHOTO_EDIT,
                        J_VERIFICATION
                )
            }
            .graphics { //启动任务列表
                arrayOf(
                        ACCOUNT.sons(
                                NETWORK_STATE,
                                NPS,
                                USER_INFO
                        ),
                        CACHE,
                        PHOTO_EDIT,
                        J_VERIFICATION,
                        DOOR,
                        BUGLY,
                        UMENG
                )
            }
            .startUp()
Doikki commented 3 years ago

26 这个问题我这也出现过

Doikki commented 3 years ago

object GDTaskCreator : TaskCreator { override fun createTask(taskName: String): Task { return when (taskName) { LaunchManager.BUGLY -> BuglyTask() LaunchManager.PHOTO_EDIT -> PhotoEditTask() LaunchManager.DOOR -> DoorTask() LaunchManager.ACCOUNT -> AccountTask() LaunchManager.NPS -> NPSTask() LaunchManager.CACHE -> CacheTask() LaunchManager.USER_INFO -> UserInfoTask() LaunchManager.J_VERIFICATION -> JVerificationTask() LaunchManager.UMENG -> UmengTask() LaunchManager.NETWORK_STATE -> NetworkStateTask() else -> EmptyTask } } }

Doikki commented 3 years ago

老哥有啥想法吗

Doikki commented 3 years ago

runBlockTask会被子线程访问,你没线程同步

YummyLau commented 3 years ago

@Doikki 你的业务代码有触动调用框架的某些流程或者修改某些变量么。还是说仅仅只有 startUp。

YummyLau commented 3 years ago

无活跃暂时关闭,有问题可打开。